您的位置:首页 > 运维架构 > 反向代理

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

2016-07-22 09:36 671 查看
《实战录》导语

本期分享人为云端卫士SOC工程师田全磊,将带来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/
4000
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;

        }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息