nginx环境配置遇到不少坑,总结一下。

1.关于内外网

server结构下需要配置listen和server_name,如果需要外网访问,server_name配置成域名即可,listen直接配置端口号。如此,通过域名:端口号,或者内网IP:端口号在相应网段下都可以访问。

2.关于重定向

重定向使用location配置。通常至少需要配置 / 路径,设置root(代码)目录,指定index。如果需要配置子路径,在主路径下继续编写即可。如

location /cepm/ { 
proxy_pass http://192.168.18.100:3090/cepm/
}

proxy_pass表示代理,代理的url可以直接跟在proxy_pass后面。
如果proxy_read_timeout值设置比较小,如1ms,访问会出现问题,尽量设置大一点。

3.关于405

nginx不支持html静态页面实现post请求,此时nginx会返回405错误。有一种方案是把post请求转换为get请求。

error_page 405 = 200 @405;
location @405
{
    root www;
    proxy_method GET;
    proxy_pass http://static_backend;
}

这里使用的代理方式是通过类似变量名的方式。下面会有介绍。

4.关于负载均衡

在location中使用变量名的方式的代理定义如下:

upstream static_backend {
    ip_hash;
    server 192.168.18:201:3080;
    server 192.168.18:200:3080;
    server 192.168.18.199:3080 down;
    server 192.168.18.199:3070 max_fails=3 fail_timeout=20s;
}

可以通过多种方式实现负载均衡。

1.weight
server 192.168.18.200 weight=10;

weight越大,负载权重越大。

2.ip_hash

每个请求按访问ip的hash结果分配,这样来自同一个IP的访客访问固定的后端服务器,可以解决session的问题。

3.第三方工具

如fair,url_hash等,需要自行安装。
配置upstream时有几个状态需要解释一下:
1.down 表示当前的server暂时不参与负载。
2.max_fails 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
3.fail_timeout max_fails次失败后,暂停的时间。
4.backup 其它所有的非backup机器down或者忙的时候,请求backup机器。因此这台机器压力会最轻。
ip_hash不能和backup、weight共存。

5.常用命令

nginx -s reload|reopen|stop|quit #重新加载配置文件|重启|停止|退出 nginx
nginx -t #测试配置文件是否有语法错误

记得配置的时候需要清除浏览器缓存,你懂得。

centos6.5搭建nginx环境