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进行访问不同的虚拟主机。个人一般比较少用,使用前面两种虚拟主机配置足够。

注意:以上几种虚拟主机之间可以混合搭配。

Q.E.D.


擅长前端的Java程序员