nginx 可以配置三种虚拟主机,分别是端口号主机,IP 主机和以及域名主机,而三种虚拟主机又可以混合配置。
在 nginx 安装目录中有一个名叫 nginx.conf 的配置文件,默认的虚拟主机配置以及示例都在此配置文件中,个人建议是把每一个虚拟主机都单独配置成一个配置文件,首先,我们需要注释掉 nginx.conf 中关于 sever 的配置,包括大括号下的内容都给注释掉。然后引入外部配置文件,只需要在 http 节点内添加一行配置:include vhost/*.conf;
,接下来在当前目录下创建 vhost 目录,然后在里面创建以 conf 为后缀的文件均可以被识别为配置文件。
-
端口号主机
端口号主机就是以不同的端口号来区分不同的主机,首先在上文所说的 vhost 目录中新建一个以 conf 为后缀的文件,然后在该文件中进行配置,下面贴一个我的配置:
server {
listen 8443 ssl;
server_name localhost;
root html;
index index.html index.htm;
# 下面以ssl开头的是配置证书时才使用的,不配置证书直接不写。
ssl_certificate ../cert/2651106_www.jiangqiang.xin.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key ../cert/2651106_www.jiangqiang.xin.key; #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
add_header Access-Control-Allow-Origin *;
proxy_pass http://127.0.0.1:8080;#任何访问路径和端口号都可以
index index.html index.htm;
}
}
上面配置的意思是输入此主机的任意 ip 或域名加端口号 8443 时(如果配置了证书,协议就需要使用 https,否则使用 http),和在本主机上访问 http://127.0.0.1:8080 的效果一样。如果我们在本机上起一个 solo 博客系统,那么默认访问的端口是 8080,使用 nginx 配置后,可以使用其他端口进行访问(我这里是 8443)。如果有两台服务器,一台服务器上有一个 8080 端口的 web 项目,我们也可以在另一台服务器上使用 nginx 将其他端口映射到 8080 端口。上面的配置复制多份,每一份修改监听的端口号和 location 中的内容,就变成了多个不同的端口号主机。
-
域名主机
域名主机是通过不同的域名进行区分访问哪一个主机,此时的端口号可以相同。首先我们去/etc/hosts 文件中加入一些配置:
127.0.0.1 jiangqiang.jios,org #前面是当前主机的ip,后面是当前主机的域名
127.0.0.1 blog.jiangqiang.xin #同一个主机配置有多个域名
然后如上文所说的方式创建配置文件,在配置文件中输入以下内容:
server { #此主机没有配置证书,如果不需要证书时,就这么配置
listen 80;
server_name jiangqiang.jios.org;#访问的域名
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
server {
listen 80 ssl;
server_name www.jiangqiang.xin;#访问的域名
root html;
index index.html index.htm;
ssl_certificate ../cert/2651106_www.jiangqiang.xin.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key ../cert/2651106_www.jiangqiang.xin.key; #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
add_header Access-Control-Allow-Origin *;
proxy_pass http://www.jiangqiang.xin;
index index.html index.htm;
}
}
这个配置文件中实际上是两个虚拟主机的配置,并且监听的端口号都是 80,如果访问的是 http://jiangqiang.jios.org ,那么就是访问上面那个主机。如果访问的是 https://www.jiangqiang.xin:80 (因为配置了证书,所以协议是 https,https 协议默认端口号是 443,因此需要显示写明端口),就是访问下面那个主机。
-
IP 主机
首先需要给该主机配置多个 IP,然后所有的配置和域名主机配置基本一样,只不过 server_name 后面填写不同的 ip 即可。我们就可以通过不同的 IP 进行访问不同的虚拟主机。个人一般比较少用,使用前面两种虚拟主机配置足够。
注意:以上几种虚拟主机之间可以混合搭配。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于