实战录 | 今天聊聊Nginx反向代理使用

Posted 云端卫士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战录 | 今天聊聊Nginx反向代理使用相关的知识,希望对你有一定的参考价值。


《实战录》导语

本期分享人为云端卫士安全平台工程师田全磊,将带来nginx反向代理使用。本文涉及到nignx的安装、nginx的配置说明、nginx的负载均衡、nginx的反向代理和nginx的ssl方反向代理以及nginx location路径匹配优先级等问题。


最近工作中经常使用nginx,为了能够更好的使用nginx,我搜罗了很多nginx相关的技术文章来读,所以才有了以下内容。在此,为文中引用到和参考到的文章提供者表示感谢。如文中相关内容有错误,也欢迎大家留言提出。


Nginx的安装与启动


1)pcre安装,支持正则表达式 
 
http://www.pcre.org/ 
# tar zxvf pcre-7.9.tar.gz   
# cd pcre-7.9
#./configure  
# make && make install 
  
2)openssl安装(可选),支持安全协议的站点 
 
http://www.openssl.org/  
# tar zxvf openssl-0.9.8l.tar.gz  
# cd openssl-0.9.8l
#./config  
# make && make install
   
3)nginx的安装  


# tar zxvf nginx-0.7.64.tar.gz  
# cd nginx-0.7.64  


4)启动


    # cd usr/local/nginx/sbin
# /nginx


5)重启


./nginx -s reload


Nginx.conf 基本配置


#user  nobody;
worker_processes  1; #nginx进程数,建议设置为等于CPU总核心数。


events {
    worker_connections  1024; #单个进程最大连接数(最大连接数=连接数*进程数)
}
 
http {
    include       mime.types;#文件扩展名与文件类型映射表
    default_type  application/octet-stream;#默认文件类型
    sendfile        on;#sendfile on; #开启高效文件传输模式
    keepalive_timeout  60;#长连接超时时间,单位是秒


#gzip模块设置(略)


upstream blog.ha97.com {
   #upstream的负载均衡,weight是权重,可以根据机器配置定义权重
#weigth参数表示权值,权值越高被分配到的几率越大。
   server 192.168.80.121:80 weight=3;
   server 192.168.80.122:80 weight=2;   
   server 192.168.80.123:80 weight=3;
  }


    server {
        listen       80;
        server_name  localhost;


    location / {
            proxy_pass   http://192.168.24.152:8080/test1;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }


  location /test {
            proxy_pass    http://192.168.24.152:8080/abc;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
     }


     server{
        listen    8082;#监听端口
        server_name   localhost;
    
        location / {
            proxy_pass   http://192.168.24.152:8080/test1;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
     }
}


Nginx.conf  server配置说明


1) server配置说明


server {
        listen       80; #监听端口
        server_name  localhost; #域名可以有多个,用空格隔开
     location / {
            proxy_pass   http://192.168.24.152:8080/test1;
            proxy_set_header  X-Real-IP  $remote_addr;
#把真实的IP发送给 转发的web服务器,否则转发的IP是nginx这台的IP
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
#意思是增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去
    #例X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3 代表 请求由1.1.1.1发出,
            #经过三层代理,#第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源
            #IP4.4.4.4是第三层代理
        }
}


2)多个server配置,监听不同端口

server { #server1
       listen       80;
       server_name  localhost;


    location / {
            proxy_pass   http://192.168.24.152:8080/test1;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
     }


     server{ #server2
        listen    8082;#监听端口
        server_name   localhost;
    
        location / {
            proxy_pass   http://192.168.24.152:8080/test1;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
     }



server配置路径匹配问题


Nginx location中可能涉及的匹配规则有:


  • = 精确匹配

  • ^~ 普通字符匹配,区分大小写

  • ~ 正则匹配,区分大小写

  • /xxx/yyy.zzz 最长匹配

  • /


其优先级顺序如下:

  • =优先级大于^~

  • ^~优先级大于~

  • ~ 对比 /xxx/yyy.zzz

  • ^~优先级大于/xxx/yyy.zzz

  • ~优先级大于/

  • /xxx/yyy.zzz优先级大于/

  • /xxx/yyy/ 优先级大于 /xxx/


综上所述location规则优先级顺序为 = > ^~ > ~ > /xxx/yyy.zzz > / ,路径匹配的优先级与location在文档中的位置先后无关。


Nginx实现ssl反向代理


server {
        listen       443;    #监听443端口
        server_name  localhost;


        ssl                on;   #启用ssl加密
        ssl_certificate      /ect/cert/free4lab.crt;    #服务器证书crt文件
        ssl_certificate_key  /ect/cert/free4lab.key;   #服务器私钥key文件
       
location / {
            proxy_pass   http://192.168.24.152:8080/test1;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}





长按二维码,关注“云端卫士官方微信”!

关注企业网络安全!


以上是关于实战录 | 今天聊聊Nginx反向代理使用的主要内容,如果未能解决你的问题,请参考以下文章

针对nginx,来具体聊聊正向代理与反向代理

针对nginx,我们来具体聊聊正向代理与反向代理区别

nginx的项目实战:nginx反向代理微服务端口

LNMP架构应用实战—Nginx反向代理负载均衡配置

邮实战用IIS ARR配置反向代理

实战|不懂反向代理,居然还说想进BAT