在上一节中,我们学习了Nginx+PHP7+MySQL的安装配置,在这一篇文章中,我们来学习如何在一个Nginx服务器中配置多个站点。
假要你所在的公司由于预算问题,现在只能提供一台服务器,但是有以下几个网站:www.yourmall.com
, m.yourmall.com
,www.yourcrm.com
需要部署,并且你已经根据我们上一篇文章中安装配置了,实现以下需求。
www.yourmall.com
是公司的电子商务平台。m.yourmall.com
是公司的电子商务平台子站,用于移动端用户的访问。www.yourcrm.com
是公司的用户关系管理系统。现在为以上网站在服务器上规划目录,创建一个目录:/var/sites
,为上面三个站点分别创建一个目录:
www.yourmall.com
对应创建的目录为: /var/sites/yourmall
m.yourmall.com
对应创建的目录为: /var/sites/m_yourmall
www.yourcrm.com
对应创建的目录为: /var/sites/yourcrm
如下图所示 -
[root@localhost sites]# mkdir /var/sites/yourmall [root@localhost sites]# mkdir /var/sites/m_yourmall [root@localhost sites]# mkdir /var/sites/yourcrm [root@localhost sites]# pwd /var/sites [root@localhost sites]# ll total 0 drwxr-xr-x. 2 root root 6 Apr 28 04:23 m_yourmall drwxr-xr-x. 2 root root 6 Apr 28 04:23 yourcrm drwxr-xr-x. 2 root root 6 Apr 28 04:23 yourmall [root@localhost sites]#
打开Nginx的配置文件:/usr/local/nginx/conf/nginx.conf
,并在 http
块下加入以下子块server
,如下配置内容所示 -
# vhost for yourmall.com configure. server { listen 80; server_name www.yourmall.com yourmall.com; #charset koi8-r; #access_log logs/yourmall.access.log main; location / { root /var/sites/yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/yourmall; } location ~ \.php$ { root /var/sites/yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } }
现在,完整的Nginx配置文件:/usr/local/nginx/conf/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; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.html; } #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$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$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; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.html; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.html; # } #} # vhost for yourmall.com configure. server { listen 80; server_name www.yourmall.com yourmall.com; #charset koi8-r; #access_log logs/yourmall.access.log main; location / { root /var/sites/yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/yourmall; } location ~ \.php$ { root /var/sites/yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } }
在目录 /var/sites/yourmall
下创建一个文件:index.html
用于测试网站的配置情况,其代码如下 -
<!DOCTYPE html> <html> <head> <title>Welcome To Yourmall.com</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>欢迎您访问:Yourmall.com </h1> <p>这是 Yourmall.com 的首页,仅用于Nginx的虚拟机配置测试演示。</p> <p> <a href="http://www.zyiz.net/">yourmall.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
现在,重新加载Nginx配置文件,在加载配置文件之前,最好先测试一下配置文件语法是否正确,使用以下命令来测试 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost sites]#
然后执行重新加载Nginx配置文件 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -s reload [root@localhost sites]#
到了这一步,我们来看看网站 www.yourmall.com 是否配置成功,接下来我们要访问这个域名,看能不能看到我们在上面写入的 index.html
文件中的内容。在测试访问www.yourmall.com 域名之前,我们还要对这个域名进行映射(外网称为解析)。在局域网内的一台Windows
计算机上打开文件 C:\Windows\System32\drivers\hosts
,在这个文件的最后一行加入以下内容 -
192.168.0.134 www.yourmall.com 192.168.0.134 yourmall.com
注意:在这里,
192.168.0.134
是配置Nginx服务器的IP,如果你的服务器不是这个IP,请写上对应的服务器IP。
现在,打开浏览器,访问以下网站域名: www.yourmall.com
或 yourmall.com
,没有错误,应该会看到以下界面 -
就这样,第一个网站的配置完成了!
现在,我们来配置第二个网站:m.yourmall.com
, 假设 m.yourmall.com
这个网站它是 www.yourmall.com
的二级域名网站,主要用于服务主站 www.yourmall.com
的移动端访问用户。
打开Nginx的配置文件:/usr/local/nginx/conf/nginx.conf
,并在 http
块下加入以下子块server
,如下配置内容所示 -
# 手机/移动端网站 vhost for m.yourmall.com configure. server { listen 80; server_name m.yourmall.com; #charset koi8-r; #access_log logs/m_yourmall.access.log main; location / { root /var/sites/m_yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/m_yourmall; } location ~ \.php$ { root /var/sites/m_yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } }
现在,完整的Nginx配置文件:/usr/local/nginx/conf/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; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.html; } #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; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } # vhost for yourmall.com configure. server { listen 80; server_name www.yourmall.com yourmall.com; #charset koi8-r; #access_log logs/yourmall.access.log main; location / { root /var/sites/yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/yourmall; } location ~ \.php$ { root /var/sites/yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } # 手机/移动端网站 vhost for m.yourmall.com configure. server { listen 80; server_name m.yourmall.com; #charset koi8-r; #access_log logs/m_yourmall.access.log main; location / { root /var/sites/m_yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/m_yourmall; } location ~ \.php$ { root /var/sites/m_yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } }
在目录 /var/sites/m_yourmall
下创建一个文件:index.html
用于测试网站的配置情况,其代码如下 -
<!DOCTYPE html> <html> <head> <title>Welcome To Yourmall.com</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>欢迎您访问:m.yourmall.com </h1> <p>这是 Yourmall.com 主站的子域名:<a href="http://www.zyiz.net/">m.yourmall.com</a> ,仅用于Nginx的虚拟机配置测试演示。</p> <p> <a href="http://www.zyiz.net/">m.yourmall.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
现在,重新加载Nginx配置文件,在加载配置文件之前,最好先测试一下配置文件语法是否正确,使用以下命令来测试 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost sites]#
然后执行重新加载Nginx配置文件 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -s reload [root@localhost sites]#
到了这一步,我们来看看网站 m.yourmall.com 是否配置成功,接下来我们要访问这个域名,看能不能看到我们在上面写入的 index.html
文件中的内容。在测试访问m.yourmall.com 域名之前,我们还要对这个域名进行映射(外网称为解析)。在局域网内的一台Windows
计算机上打开文件 C:\Windows\System32\drivers\hosts
,在这个文件的最后一行加入以下内容 -
192.168.0.134 m.yourmall.com
注意:在这里,
192.168.0.134
是配置Nginx服务器的IP,如果你的服务器不是这个IP,请写上对应的服务器IP。
现在,打开浏览器,访问以下网站域名: m.yourmall.com
没有错误,应该会看到以下界面 -
就这样,第二个网站(子域名)的配置完成了!
接下来,我们来配置第三个网站:www.yourcrm.com
, 假设 www.yourcrm.com
这个网站它是一个客户管理系统,主要记录客户信息的管理网站。
注意:配置这个网站与第一个网站类似,只是指定/使用文件目录不太一样。
打开Nginx的配置文件:/usr/local/nginx/conf/nginx.conf
,并在 http
块下加入以下子块server
,如下配置内容所示 -
# 客户管理系统 vhost for yourcrm.com configure. server { listen 80; server_name www.yourcrm.com yourcrm.com; #charset koi8-r; #access_log logs/yourcrm.access.log main; location / { root /var/sites/yourcrm; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/yourcrm; } location ~ \.php$ { root /var/sites/yourcrm; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } }
现在,完整的Nginx配置文件:/usr/local/nginx/conf/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; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.html; } #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; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } # vhost for yourmall.com configure. server { listen 80; server_name www.yourmall.com yourmall.com; #charset koi8-r; #access_log logs/yourmall.access.log main; location / { root /var/sites/yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/yourmall; } location ~ \.php$ { root /var/sites/yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } # 手机/移动端网站 vhost for m.yourmall.com configure. server { listen 80; server_name m.yourmall.com; #charset koi8-r; #access_log logs/m_yourmall.access.log main; location / { root /var/sites/m_yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/m_yourmall; } location ~ \.php$ { root /var/sites/m_yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } # 客户管理系统 vhost for yourcrm.com configure. server { listen 80; server_name www.yourcrm.com yourcrm.com; #charset koi8-r; #access_log logs/yourcrm.access.log main; location / { root /var/sites/yourcrm; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/yourcrm; } location ~ \.php$ { root /var/sites/yourcrm; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } }
在目录 /var/sites/yourcrm
下创建一个文件:index.html
用于测试网站的配置情况,其代码如下 -
<!DOCTYPE html> <html> <head> <title>Welcome To YourCrm.com</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>欢迎您访问:yourcrm.com </h1> <p>这是 yourcrm.com 网站的首页 ,仅用于Nginx的虚拟机配置测试演示。</p> <p> <a href="http://www.zyiz.net/">yourcrm.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
现在,重新加载Nginx配置文件,在加载配置文件之前,最好先测试一下配置文件语法是否正确,使用以下命令来测试 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost sites]#
然后执行重新加载Nginx配置文件 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -s reload [root@localhost sites]#
到了这一步,我们来看看网站 www.yourcrm.com 是否配置成功,接下来我们要访问这个域名,看能不能看到我们在上面写入的 index.html
文件中的内容。在测试访问www.yourcrm.com 域名之前,我们还要对这个域名进行映射(外网称为解析)。在局域网内的一台Windows
计算机上打开文件 C:\Windows\System32\drivers\hosts
,在这个文件的最后一行加入以下内容 -
192.168.0.134 www.yourcrm.com 192.168.0.134 yourcrm.com
注意:在这里,
192.168.0.134
是配置Nginx服务器的IP,如果你的服务器不是这个IP,请写上对应的服务器IP。
现在,打开浏览器,访问以下网站域名: www.yourcrm.com
或 yourcrm.com
,没有错误,应该会看到以下界面 -
就这样,第三个网站的配置完成了!
经过了上面三个网站的配置,相信你可能觉得 Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
内容有点多了,这还只是最简单的配置(还未包函重写,日志记录等规则),从头看到尾多少有点不太方便,能不能有更好的办法解决这个问题? 当然可以。我们可以把每个网站的配置独立成一个配置文件,然后在主配置文件中使用 include
指令包函进来。
现在来看看怎么修改配置,首先分别创建三个网站的配置文件:
www.yourmall.com
-> /usr/local/nginx/conf/vhosts/yourmall.conf
m.yourmall.com
-> /usr/local/nginx/conf/vhosts/m_yourmall.conf
www.yourcrm.com
-> /usr/local/nginx/conf/vhosts/yourcrm.conf
再将上面配置中对应每个网站的文件包括放入主配置文件。例如,对于文件 /usr/local/nginx/conf/vhosts/yourmall.conf
放置的文件内容如下:
# vhost for yourmall.com configure. server { listen 80; server_name www.yourmall.com yourmall.com; #charset koi8-r; #access_log logs/yourmall.access.log main; location / { root /var/sites/yourmall; index index.html index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/sites/yourmall; } location ~ \.php$ { root /var/sites/yourmall; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } }
其它两个网站也同样放入对应配置。
在主配置文件:/usr/local/nginx/conf/nginx.conf
中,包函上述三个文件即可。现在文件:/usr/local/nginx/conf/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; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.html; } #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; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } } # 网站配置 include /usr/local/nginx/conf/vhosts/yourmall.conf; include /usr/local/nginx/conf/vhosts/m_yourmall.conf; include /usr/local/nginx/conf/vhosts/yourcrm.conf; }
重新加载Nginx配置文件,在加载配置文件之前,最好先测试一下配置文件语法是否正确,使用以下命令来测试 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost sites]#
然后执行重新加载Nginx配置文件 -
[root@localhost sites]# /usr/local/nginx/sbin/nginx -s reload [root@localhost sites]#
到此,在Nginx上配置虚拟机演示实例就完了。