1.背景:

虚拟主机:一台web主机配置多个站点,每个站点,希望用不同的域名和站点目录,或者是不同的端口,或者是不同的IP

假设网站的域名为:25linux.com,网站下面设有

http://www.25linux.com;

http://blog.25linux.com;

http://bbs.25linux.com

三个站点,这样我们可以在一台nginx主机上配置虚拟主机来实现。

通常虚拟主机分为3:

基于域名,基于端口,基于IP,以及它们的混合来实现,我这里以基于域名的方式来创建虚拟主机。

2.创建站点目录:

# 我打算以nginx的默认root目录来创建www、blog、bbs三个网站的目录,#  切换到nginx的root目录,默认为Root "/usr/local/nginx/html"
[root@web ~]# cd /usr/local/nginx/html/
# 创建www,bbs,blog三个目录:
[root@web html]# mkdir {www,bbs,blog}

# 给三个站点分别创建index.html页面:[root@nginx html]# touch {www,blog,bbs}/index.html
# for name in www bbs blog;do echo "http://$name.25linux.com" >/usr/local/nginx/html/$name/index.html;done 
[root@webhtdocs]# cat bbs/index.html
http://bbs.25linux.com
[root@webhtdocs]# cat www/index.html
http://www.25linux.com
[root@webhtdocs]# cat blog/index.html
http://blog.25linux.com

3.配置nginx.conf文件

我们把nginx.conf主配置文件中的server段的配置给提取出来,放到单独的文件中,就像apache的虚拟主机配置一样,我这里要建3个站点所以使用3个配置文件www_server.conf;include  bbs_server.conf;include  bbs_server.conf
[root@nginx nginx]# tail -84 nginx.conf >www_server.conf
[root@nginx nginx]# tail -84 nginx.conf >bbs_server.conf
[root@nginx nginx]# tail -84 nginx.conf >blog_server.conf
注意:需要删除最后一行的“}”号。
然后在主配置文件中删除所有的server段,

wKioL1cjKBDBlW9rAADVmeCkg50895.png

在http段中加入include  www_server.conf;include  bbs_server.conf;include  bbs_server.conf三个配置文件,
[root@nginx nginx]# vim nginx.conf
#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
include  www_server.conf;
include  bbs_server.conf;
include  bbs_server.conf;
 
}

4.配置虚拟主机

我们分别在www_server.conf;include  bbs_server.conf;include  bbs_server.conf配置文件中配置三个虚拟主机

先检查一下语法
[root@nginx nginx]# /usr/local/nginx/sbin/nginx-t
nginx: the configuration file/etc/nginx/nginx.conf syntax is ok
nginx: configuration file/etc/nginx/nginx.conf test is successful

4.1. 编辑www站点server.conf配置文件

[root@nginx nginx]# vim www_server.conf
 
server {
       listen       80;
       server_name  www.25linux.com;    
 
       #charset koi8-r;
 
       #access_log logs/host.access.log  main;
 
       location / {
           root   html/www;
           index  index.phpindex.html index.htm;
       }
 
       #error_page  404              /404.html;
 
       # redirect server error pages to the static page /50x.html
       #
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
 
         
 
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       location~ \.php$ {
            fastcgi_pass  127.0.0.1:9000;
           root  html/www;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
 
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       #location ~ /\.ht {
       #    deny  all;
       #}
    }

4.2. 编辑bbs站点server.conf配置文件

[root@nginx nginx]# vim bbs_server.conf
server {
       listen       80;
       server_name  bbs.25linux.com;
 
       #charset koi8-r;
 
       #access_log logs/host.access.log  main;
 
       location / {
           root   html/bbs;
           index  index.php index.htmlindex.htm;
       }
 
        #error_page 404              /404.html;
 
       # redirect server error pages to the static page /50x.html
       #
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
 
       # proxy the PHP scripts to Apache listening on 127.0.0.1:80
       #
       #location ~ \.php$ {
       #    proxy_pass   http://127.0.0.1;
       #}
 
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       location ~ \.php$ {
           fastcgi_pass   127.0.0.1:9000;
            root   html/bbs;
           fastcgi_index  index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include        fastcgi_params;
        }
 
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       #location ~ /\.ht {
       #    deny  all;
       #}
    }

4.3. 编辑blog站点server.conf配置文件

server {
       listen       80;
       server_name  blog.25linux.com;
       root  html/blog;
       #charset koi8-r;
 
       #access_log logs/host.access.log  main;
 
       location / {
           
           index  index.php index.htmlindex.htm;
       }
 
       #error_page  404              /404.html;
 
       # redirect server error pages to the static page /50x.html
       #
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
 
       # proxy the PHP scripts to Apache listening on 127.0.0.1:80
       #
       #location ~ \.php$ {
       #    proxy_pass   http://127.0.0.1;
       #}
 
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       location ~ \.php$ {          
           fastcgi_pass   127.0.0.1:9000;
            root   html/blog;
           fastcgi_index  index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include        fastcgi_params;
       }
 
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #location ~ /\.ht {
       #    deny  all;
       #}
    }
修改后,再次检查语法:
[root@nginx nginx]# /usr/local/nginx//sbin/nginx-t
nginx: the configuration file/etc/nginx/nginx.conf syntax is ok
nginx:configuration file /etc/nginx/nginx.conf test is successful

最后重新加载nginx:
[root@nginx nginx]# service nginx reload
nginx: the configuration file /etc/nginx/nginx.confsyntax is ok
nginx: configuration file/etc/nginx/nginx.conf test is successful
Reloadingnginx:                                          [  OK  ]

5.编辑本地hosts文件,添加dns记录

       由于用的是测试域名,没有经过dns服务器解析,所以需要在windows的机器上的hosts文件添加dns记录,电脑才能通过域名访问:

wKioL1cjKUvSlNleAAHnD1VAZHo875.png

wKioL1cjKUuD91yKAAAbqc4vJsM047.png


6.然后浏览器访问域名:

wKiom1cjKH2z4rkHAABm_3cfORw663.png

wKiom1cjKH6yrRhcAAB0wx81lfc898.png

wKioL1cjKUyiu1NcAAB9VdTxMKQ057.png

nginx虚拟主机配置成功,下面我们来搭建3个虚拟主机的站点。