Nginx 反向代理

Nginx 代理服务常见模式

正向代理

正向代理类似一个跳板机,代理访问外部资源,正向代理的过程,它 “隐藏” 了真正的请求客户端,服务端不知道真正的客户端是谁(取决于代理服务器是否告知服务端),客户端请求的服务都被代理服务器代替来请求 。

比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器访问;请求发到代理服务器,代理服务器能够访问谷歌,这样由代理服务器再请求谷歌,取到返回数据,再返回给我们,这样就能访问谷歌,这就是正向代理 。

反向代理(转载

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受 internet 上的请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求的客户端,此时代理服务器对外就表现为一个服务器 。

反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打 10086 一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了 。

反向代理的作用:

(1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网

(2)负载均衡,通过反向代理服务器来优化网站的负载

正向代理和反向代理的区别(转载

正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端,

反向代理即是服务端代理,代理服务端,客户端不知道实际提供服务的服务端 。

正向代理,proxy 和 client 同属一个 LAN,对 server 透明;反向代理,proxy 和 server 同属一个 LAN,对 client 透明

Nginx 反向代理

Nginx 反向代理支持协议

Nginx 反向代理模块

反向代理模式(协议) Nginx 配置模块
http,https,websocket ngx_http_proxy_module
fastcgi ngx_http_fastcgi_module
uwsgi ngx_http_uwsgi_module
grpc ngx_http_v2_module

Nginx 反向代理语法

Nginx 负载均衡需要使用 ngx_http_proxy_module 模块 。

# Example Configuration
location / {
    proxy_pass       http://localhost:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;						 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;	   
}
# X-Real-IP & X-Forwarded-For 的区别
# 无论几级代理,每经过一级代理,代理服务器都会把这次请求的来源 IP 追加在 X-Forwarded-For 中
# 只能传递 本级代理请求 的来源 IP 存放在 X-Real-IP 中

# Directives
Syntax:	proxy_bind address [transparent] | off;
Default:	—
Context:	http, server, location
This directive appeared in version 0.8.22.

# 实例
[root@lb01 conf.d]# vi blog.wqh.com.conf 
server {
        listen  80;
        server_name blog.wqh.com;
        location / {
                proxy_pass http://172.16.1.8:80;
                proxy_set_header HOST      $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
[root@lb01 conf.d]# vi zh.wqh.com.conf 
server {
        listen  80;
        server_name wecenter.wqh.com;
        location / {
                proxy_pass http://172.16.1.8:80;
                proxy_set_header HOST      $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

Nginx 反向代理优化

# Directives
# 设置http请求header项传给后端服务器节点,可实现让代理后端服务器节点获取访问客户端用户真实IP地址
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
         proxy_set_header Connection close;
Context: http, server, location            
# 表示反向代理与后端节点服务器连接的超时时间 
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location       
# 代理后端服务器的数据回传时间,在规定时间之内服务器必须传完所有数据,否则断开
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location      
# 设置nginx从代理的后端服务器获取信息时间,表示连接建立成功后,nginx等待后端服务器的响应时间 
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
# 设置开启缓冲区,后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传,不是全部接收完再传给客户端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location    
# 设置缓冲区的大小,默认该缓冲区大小等于指令 proxy_buffers 设置大小
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location          
# 设置缓冲区的数量和大小 
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location     
# 用于指定 客户端请求主体 缓冲区大小
client_body_buffer_size             
# 用于设置系统很忙时可以使用的 proxy_buffers 大小,官方推荐 proxy_buffer*2
proxy_busy_bufers_size        
# 临时缓存文件大小
proxy_temp_file_write_size    



# 实例 
[root@lb01 ~]# cat /etc/nginx/proxy_params 
proxy_set_header Host  $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

# 将其包括在 .conf 配置文件中,也可以写在 主配置文件 /etc/nginx/nginx.conf 中
[root@lb01 ~]# cat /etc/nginx/conf.d/blog.wqh.com.conf 
server {
        listen  80;
        server_name blog.wqh.com;
        location / {
                proxy_pass http://172.16.1.8:80;
	        include proxy_params;
        }
}
[root@lb01 ~]# cat /etc/nginx/conf.d/wecenter.wqh.com.conf 
server {
        listen  80;
        server_name wecenter.wqh.com;
        location / {
                proxy_pass http://172.16.1.8:80;
	        include proxy_params;
        }
}
posted @ 2020-05-25 23:21  拨云见日z  阅读(152)  评论(0编辑  收藏  举报