博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

nginx相关配置说明

Posted on 2016-09-27 15:48  懒人ABC  阅读(1169)  评论(0编辑  收藏  举报

基础:

nginx配置文件主要分为六个区域:main section、events section、http section、sever section、

location section、upstream section。依据这个分类学习nginx的模块。

location 六种匹配模式:

/ 匹配所有

~ 正则表达式 区分大小写

~* 正则表达式 不区分大小写

= 精确匹配,结束继续匹配

^~ 普通字符匹配,如果匹配到,则结束继续匹配;找不到则继续匹配

@ 定义内部重定向 ,例如 error_page=@aaa

# @类似于变量定义
        # error_page 403 http://blog.csdn.net; #这种定义不允许,需求利用@定义临时变量来实现
        error_page 403 @page403;
        location @page403 {
            proxy_pass http://blog.csdn.net;
        }

 

1,负载均衡

    可以有ip_hash,round-robin,least-connected。一般采用ip_hash,防止session在不同后端服务器切换时的session变换。但是ip_hash存在一个问题,就是同一个局域网无法实现负载均衡,需要用sticky_cookie_insert替代。

    负载均衡使用upstream来设置,例如: upstream aaa {

  server: 10.1.1.100:8080;

     server:10.1.1.101:9090;}

     ...

     location / {

  proxy_pass http://aaa;}

2,权重

   在负载均衡时,需要为每个服务器设置权重,否则容易造成一阶段内都访问一个服务器而其他几个服务器都空闲。

   例如A.com weight=3 B.com C.com,表示5次访问里,3次进入A.com,1次进入B.com 2次进入C.com

3,fastcgi

   一般php等程序处理时,需要用到一些参数,通过fashcgi会方便很多。

4,proxy_set_header

    proxy_set_header Host $http_host;

    proxy_set_header X-Real_IP $remote_addr;

    proxy_set_header X-Forworded-For $proxy_add_x_forwarded_for;

    以上两个解决nginx作为反向代理时能够把客户端ip等信息传达给后端的服务器.注意:$http_host和$server_name区别在于$http_host的端口不为80时,是含端口的,而$server_name是不含的。

    proxy_set_header Cookie $http_cookie;把cookie值带到后端服务器,防止session发生变化

    但是注意在后端服务器返回客户端时,需要通过设置proxy_cookie_domain和proxy_cookie_path来替换掉后端服务器的域名及路径信息,否则会造成session,cookie的不正确。

5,location反向代理得后缀反斜杠的问题。

    location /service/

    proxy_pass http://a.com;提交到后端服务器是http://a.com/service/

    proxy_pass http://a.com/;提交到后端服务器是http://a.com/

6,内部域名映射

   有些时候需要通过域名访问内部服务器,则要在/etc/hosts里添加配置如例:127.0.0.1 wap.a.com

  内部机器最好通过域名访问,防止ip的变动,要修改好多东东。

7,反向代理时,参数域名的维持

    proxy_pass http://$host$uri 或者proxy_pass $request或者$schema://$host$uri

    见nginx里的变量:http://blog.chinaunix.net/uid-15117916-id-2777222.html

8,重定向后端的返回地址

    使用proxy_redirect把返回给客户端的IP地址重新封装,例如:proxy_redirect http://a.com:9090/ /;

    即把后端的端口和域名替换为对外公开的域名