因为想搭建web邮件服务,所以需要使用到nginx的多站点。在实际生活中一台vps只用来做web服务器,有点浪费的说,所以记录一下nginx的多站点的配置方法。
博主的nginx是按照这篇整理来搭建的:Centos6.5编译安装Tengine和PHP7
Nginx配置文件结构
首先看一下nginx.conf的大致结构
.... http{ .... server { .... location / { .... } .... location ~ \.php$ { .... } .... } } ....
可以看到http包含了一个server,server中定义了一个站点的基本信息。所以nginx得多站点配置方法即为将server部分写进一个独立的文件中。然后在nginx.conf中的http大括号内引入这个的独立的server部分的配置文件。
a.com
以建立a.com和b.com两个域名为例。
在nginx的配置文件目录下新建一个vhosts文件夹专门用来存放各站点的配置信息(即server部分)
# mkdir /usr/share/nginx/conf/vhosts
新建a.com.conf文件,作为a.com站点的配置文件。将原nginx.conf中的server部分复制到这个文件里。并做适当的修改。例如
# vim /usr/share/nginx/conf/vhosts/a.com.conf server { listen 80; server_name a.com; #access_log /usr/share/nginx/logs/access_ 51mail.log main; location / { root /usr/share/nginx/html/51mail; index index.php index.html index.htm; } #error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/51mail/$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
注意修改server_name,如果是一级域名的话,注意不要带有www。如果带有的话,使用a.com访问的是默认的站点而不是www.a.com。
注意修改root的路径,指定一个新的路径作为网站的根目录。然后就是php的fastcgi中的路径。
b.com
b.com的配置文件和上面类似。
nginx中引入多站点的配置文件
最后只要在nginx的http的大括号内引入配置好的各站点文件。注意引入的位置,比如:
.... http{ .... server { .... location / { .... } .... location ~ \.php$ { .... } } # 包含所有的虚拟主机的配置文件 include /usr/share/nginx/conf/vhosts/*; .... } ....
如上,则原来的nginx的http里面的那个server就会作为默认站点继续运行。
最后重启nginx服务,即可生效!
报错
记录一个重启nginx服务时遇到的错误:
# service nginx restart Stopping nginx: [FAILED] Starting nginx: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
解决方法如下:
在nginx.conf的http{}里面添加这句:
server_names_hash_bucket_size 64;
如果64还不够,那么就按32的倍数往上加。
下面是在中文wiki上摘抄的一段说明:
保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的
Comments | 2 条评论
一键包倒是没有用过,感觉还是自己折腾折腾比较好
学习了