nginx常用配置

11-24 9,793 views

在公司里面遇到最多的问题是:

1.怎么把访问test.com跳转到www.test.com上面?

在你的server里面添加如下配置:
if ($host != ‘www.test.com’ ) {
rewrite ^/(.*)$ http://www.test.com/$1 permanent;
}

办法2:在配置文件里面写两个server,第一个里面把不带www的域名去掉server
{
  listen       80;
  server_name www.test.com;

在配置文件的最下面添加上,这样就可以了。
server {
                server_name test.com;
                rewrite ^(.*) http://www.test.com/$1 permanent;
        }
 
如果有多个不同的域名都绑定在同一个目录下不带3W的301到带3W的方法和上面的一样,在vhost的完整配制里后面加上
server {
server_name test1.com;
rewrite ^(.*) http://www.test1.com$1 permanent;
}
 
server {
server_name test2.com;
rewrite ^(.*) http://www.test2.com$1 permanent;
}
 
server {
server_name test3.com;
rewrite ^(.*) http://www.test3.com$1 permanent;
}
 
301永久跳转,当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息中的状态码的一种,表示本网页永久性转移到另一个地址。
302临时跳转,也是状态码的一种,意义是暂时转向到另外一个网址。
二者的区别主要是,一句话:302容易被搜索引擎视为spam(垃圾),301则不会。
permanent代表301永久跳转,改为redirect则为302临时跳转。
 

2.怎么将用ip访问的用户跳转到www.test.com上面?

默认跳转需要新建一个server
server
{
# listen 80;
listen 80 default_server;
server_name _; #default
# return 444;
rewrite ^(.*) http://www.yuu1.com permanent;
}

 

nginx访问一个域名跳转到另一个域名

server
{
listen 80;
server_name blog.mgcrazy.com wgkgood.gicp.net;
if ($host = ‘wgkgood.gicp.net’ ) {
rewrite ^/(.*)$ http://chinaapp.sinaapp.com/$1 permanent;
}

2015.01.26

需求本地域名zhao.test.com跳转到主域名www.test.com/youxi,专区所有域名zhao.test.com/tszq跳转到主域名www.test.com/tszq,部分目录zhao.test.com/dailynew跳转到www.test.com/youxi/dailynew/.

分析本地域名zhao.test.com跳转到主域名www.test.com/youxi,这个实现简单,直接一条rewrite就可以实现,但是又需求zhao.test.com/tszq跳转到主域名www.test.com/tszq,如果按照上面写了一条rewrite,会发现所有的专区zhao.test.com/tszq会跳转到www.test.com/youxi/tszq,而这个二级目录下面并没有相关的静态文件,会出现404错误,而专区有上千个域名,这样会导致这上千个域名都无法访问,所以要满足专区域名能够正确的跳转,写了一条rewrite, rewrite ^/(?!rpg|slg|edu|sim|spt|gl|dailynew|robots.txt|index.php|index|index.html)(.*)$ http://www.test.com/$1 permanent;break;这样二级域名专区都可以正常的跳转了,但是直接访问zhao.test.com会跳转到www.test.com,需求是要跳转到www.test.com/youxi,研究了一下,直接写if判断貌似无法实现,首页跳转正确了,但是专区跳转又会变为www.test.com/youxi/tszq,这样无法同时满足要求,最后还是用rewrite和location解决了。

配置如下:

rewrite ^/$ /index.html last;   #将访问zhao.test.com变为zhao.test.com/index.html

location ~^/index.html       #然后匹配index.html并重写成需求目录结构
{
rewrite ^/index(.*) http://www.test.com/youxi/ permanent;
break;
}

location ~^/dailynew    # 某些特殊跳转的目录单独匹配
{
rewrite ^/dailynew(.*) http://www.test.com/youxi/dailynew$1 permanent;
break;
}

rewrite ^/(?!rpg|slg|edu|sim|spt|gl|dailynew|robots.txt|index.php|index|index.html)(.*)$ http://www.test.com/$1 permanent;    #去除那些特殊跳转的匹配其余的所有专区跳转到主域名对应的专区
break;

location ~ .*\.(php)?$ {
include vhost/hack.conf;
proxy_pass http://127.0.0.1:88;
}

nginx的404页面配置:

1.创建自己的404.html页面

2.更改nginx.conf在http定义区域加入: fastcgi_intercept_errors on;

3.更改nginx.conf(或单独网站配置文件,例如在nginx -> sites-enabled下的站点配置文件 )

中在server 区域加入: error_page 404  /404.html  或者

error_page  404   http://www.xxx.com/404.html;

4.更改后重启nginx,,测试nginx.conf正确性: /opt/nginx/sbin/nginx –t

#502 等错误可以用同样的方法来配置。 

error_page  500 502 503 504  /50x.html;

注意事项:

1.必须要添加:fastcgi_intercept_errors on; 如果这个选项没有设置,即使创建了404.html和配置了error_page也没有效果。fastcgi_intercept_errors 语法: fastcgi_intercept_errors on|off 默认: fastcgi_intercept_errors off 添加位置: http, server, location 默认情况下,nginx不支持自定义404错误页面,只有这个指令被设置为on,nginx才支持将404错误重定向。这里需要注意的是,并不是说设置了fastcgi_intercept_errors on,nginx就会将404错误重定向。在nginx中404错误重定向生效的前提是设置了fastcgi_intercept_errors on,并且正确的设置了error_page这个选项(包括语法和对应的404页面)

2.不要出于省事或者提高首页权重的目的将首页指定为404错误页面,也不要用其它方法跳转到首页。

3.自定义的404页面必须大于512字节,否则可能会出现IE默认的404页面。例如,假设自定义了404.html,大小只有11个字节(内容为:404错误)。

MySQL索引原理及慢查询优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更 好的使用...

阅读全文

Mysql添加删除索引

使用索引,能够提高查询的速度 1、创建索引 1)ALTER TABLE 创建普通索引,UNIQUE索引或者PRIMARY KEY索引 ALTER TABLE table_name ADD INDEX index_name(colu...

阅读全文

nginx反向代理问题汇总及监控脚本

今天配置nginx的反向代理,配置文件如下: worker_processes 1; events { worker_connections 1024;} http { include mime.types; default_type application/...

阅读全文