首先不能让用户通过ip直接访问网站,我们必须要有域名,只能通过域名访问网站。
看一下怎么配置:
先配置处理域名的虚拟主机(通过域名访问的正常行为),代码如下:
0 1 2 3 4 5 6 7 8 9 10 |
server { listen 80; server_name www.****.com ... #行为 #location / { #root html; #} } |
这个配置是你的网站的默认行为,如处理php等等。
然后配置一下默认的虚拟主机行为,与上述(或你配置的非默认虚拟主机)listen和server_name不符的请求(如直接用ip访问)会在这里处理,代码:
0 1 2 3 4 5 6 7 8 |
server { listen 80 default_server; server_name _; #return 404; 返回404 #return 301 http://www.****.com 跳转到域名 } |
listen address[:port] [default_server]
- address监听的主机名,port默认为80,default_server指定该虚拟主机为默认主机。
- server_name _ 这行没多大作用,所有与其他虚拟主机配置没有匹配的都转到这里处理了,不会和server_name这一项匹配,_也可以改成其他的字符。
- return 404 是返回状态码404,return 301 http://*** 意思是跳转到指定域名,也可以用 rewrite ^ http://*** (0.9.1及以前版本只能用rewrite)
如果你希望你的****.com(不带www,或者其他域名)跳转到www.****.com,就要单独添加配置:
0 1 2 3 4 5 6 7 |
server { listen 80; server_name ****.com; return 301 http://www.****.com; } |
以上三个server配置项为独立,不要把里面的配置写在一个server里,一个server处理一种域名。
另:return 301 http://www.****.com; 这个只会跳转到网站首页,如果用户访问http://****.com/abc/时,跳转后不会添加/abc/,这时,我们需要在域名后加上$request_uri,所以,一般301跳转时可配置为:return 301 http://www.****.com$request_uri;这样就会直接访问用户想访问的页面了,而不是跳到首页。