Nginx 虚拟主机配置

什么是虚拟主机

虚拟主机是指,把一台物理主机划分为多台虚拟主机,每台虚拟主机都可以是一个独立的网站,可以有独立的域名,具有完整的服务器功能。

Nginx提供虚拟主机功能,使我们不必为每个网站都提供一台Nginx服务器;只需运行一组Nginx进程,就可以运行多个域名不同网站

配置虚拟主机的方法

有三种方法:

  • 基于域名的虚拟主机(不同的域名,相同的IP,这种方式用的最多)
  • 基于端口的虚拟主机(通过不同的端口号区分虚拟主机)
  • 基于IP的虚拟主机 (不同域名, 不同的IP, 需要多个网络接口, 这种用的比较少,不演示)

基于域名配置虚拟主机

例: 在一台Linux服务器中配置两台Nginx虚拟主机,实现如下要求:

修改客户机的HOSTS文件,添加服务器IP和域名的映射

修改/etc/hosts文件,添加如下两行: (192.168.52.200是我的Linux服务器IP)

复制代码
192.168.52.200 vod.petertest.com
192.168.52.200 aud.petertest.com

为两个虚拟主机准备静态页面

复制代码
mkdir -p /www/vod /www/aud
echo "welcome to vod site" > /www/vod/index.html
echo "welcome to aud site" > /www/aud/index.html

修改Nginx.conf的server配置块

复制代码
    # 虚拟主机1(vod.petertest.com)
    server {
        listen       80;
        server_name  vod.petertest.com; # 设置域名
		access_log   vod_petertest_access.log; # 设置日志路径
        include /etc/nginx/default.d/*.conf;
		
		location / {
		    root /www/vod;
	    }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
    # 虚拟主机2(aud.petertest.com)
    server {
        listen       80;
        server_name  aud.petertest.com; # 设置域名
		access_log   aud_petertest_access.log; # 设置日志路径
        root         /www/aud; # 访问/www/vod下的页面
        include /etc/nginx/default.d/*.conf;
		location / {
		    root /www/aud;
		}

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

测试

使用nginx -t检查配置文件是否正确,使用nginx -s reload重新加载配置,测试结果如下:

复制代码
# curl vod.petertest.com
welcome to vod site
# curl aud.petertest.com
welcome to aud site

注: 如遇到Nginx报错: bind() to 0.0.0.0:8088 failed (13: Permission denied), 参考 link

基于端口配置虚拟主机

例: 在一台Linux服务器中配置两台Nginx虚拟主机,实现如下要求:

修改Nginx.conf的server配置块

配置方法和"基于域名配置虚拟主机"类似,只需修改server_name和listen的端口号

复制代码
    # 虚拟主机1(vod.petertest.com)
    server {
        listen       80;
        server_name  vod.petertest.com; # 设置域名
		access_log   vod_petertest_access.log;
        include /etc/nginx/default.d/*.conf;
		
		location / {
		    root /www/vod;
	    }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
    # 虚拟主机2(aud.petertest.com)
    server {
        listen       88; # 修改下端口
        server_name  vod.petertest.com; # 设置域名
		access_log   aud_petertest_access.log;
        root         /www/aud;
        include /etc/nginx/default.d/*.conf;
		location / {
		    root /www/aud;
		}

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

测试

使用nginx -t检查配置文件是否正确,使用nginx -s reload重新加载配置,测试结果如下:

复制代码
# curl vod.petertest.com
welcome to vod site
# curl vod.petertest.com:88
welcome to aud site

Nginx server_name的其他配置案例

同一个server_name匹配多个域名

通过不同的域名访问相同的页面, 实现如下效果:

方法:修改nginx.conf的server配置块, 一个server_name中配置多个域名,如下:

复制代码
    server {
        listen       80;
        server_name  vod.petertest.com vod1.petertest.com;	# 在一个server中配置多个servername
        root         /www/vod;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

测试结果:

复制代码
# curl vod.petertest.com
this is vod web site
# curl vod1.petertest.com
this is vod web site

通配符匹配多个server_name

例如,访问.petertest.com结尾的域名,返回/www/vod页面

Nginx.conf配置如下:

复制代码
    server {
        listen       80;
        server_name  *.petertest.com;	# 通配符匹配
        root         /www/vod;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

通配符结束匹配

实现如下效果:

Nginx.conf配置如下:

复制代码
    server {
        listen       80;
        server_name  vod.petertest.com;
        root         /www/www;
        include /etc/nginx/default.d/*.conf;
		# ...
    }
    server {
        listen       80;
        server_name  vod.petertest.*;			# 通配符结束匹配
        root         /www/aud;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

测试结果:

复制代码
# curl vod.petertest.com
this is www web site
# curl vod.petertest.io
this is aud web site

正则匹配

实现如下效果:

Nginx.conf配置如下:

复制代码
    server {
        listen       80;
        server_name  vod.petertest.com;
        root         /www/www;
        include /etc/nginx/default.d/*.conf;
		# ...
    }
    server {
        listen       80;
        server_name  ~^[0-9]+\.petertest\.com$;			# 正则匹配
        root         /www/vod;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

测试结果:

复制代码
# curl vod.petertest.com
this is www web site
# curl 123.petertest.com
this is aud web site

参考

手把手教你配置Nginx的虚拟主机

相关推荐
吴声子夜歌13 小时前
Nginx应用与运维——Nginx集群负载与配置管理(二)
运维·nginx
cpolar技术支持13 小时前
外网测试机的异常传不回内网?自托管 Sentry,用 cpolar 打通错误上报链路
python·nginx·docker·cpolar·sentry
吴声子夜歌18 小时前
Nginx应用与运维——Nginx在Kubernetes中的应用(一)
运维·nginx·kubernetes
螺蛳粉 螺蛳粉19 小时前
第一篇:Keepalived 高可用实战:VIP 漂移与 Nginx 主备切换完整指南
运维·nginx·负载均衡·keepalived·高可用
吴声子夜歌19 小时前
Nginx应用与运维——Nginx在Kubernetes中的应用(三)
运维·nginx·kubernetes
吴声子夜歌20 小时前
Nginx应用与运维——Nginx在Kubernetes中的应用(二)
运维·nginx·kubernetes
Wang's Blog1 天前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
Lsetea1 天前
Nginx加载证书时报SSL_CTX_use_PrivateKey_file失败:私钥配对与权限排查
nginx·https·ssl证书·私钥·证书部署
吴声子夜歌1 天前
Nginx应用与运维——Nginx负载均衡应用实战(二)
运维·nginx·负载均衡
Wang's Blog2 天前
Java 项目实战: 外卖平台优化-Nginx六种负载均衡策略对比与选型
java·nginx·负载均衡