二、Nginx 代理

  • 一、Nginx 配置
  • 二、Nginx 代理
  • 三、Nginx 负载均衡
  • 四、Nginx 性能调优

一、Nginx 代理

  • 提高访问速度
  1. 由于 目标主机 返回的数据,会存放在 代理服务器 的硬盘中。
  2. 因此下一次 客户端 再访问 相同的站点数据 时,会直接从 代理服务器 的硬盘中读取,起到了 缓存 的作用。
  3. 尤其对于 热门站点 能明显 提高请求速度。

  • 防火墙作用
  1. 由于所有的 客户机 请求,都必须通过 代理服务器 访问远程站点。
  2. 因此可在 代理服务器 上设限,过滤某些不安全信息。

  • 通过 代理服务器,访问 受限制的目标站点
  1. 互联网上有许多开放的 代理服务器,客户端 直接访问 目标站点 受限时,可通过不受限的 代理服务器 访问目标站点。
  2. 通俗说,我们使用的 浏览器 就是利用了 代理服务器,虽然不能出国,但也可直接访问 外网。

1. 正向代理

  • 正向代理。
  1. 指 客户端 与 目标服务器 之间增加一个 代理服务器。
    客户端 直接访问 代理服务器,再由 代理服务器 访问 目标服务器。
    并返回给 客户端。
  2. 这个过程中,客户端 需要知道 代理服务器 地址,并配置连接。

  • 应用场景。
  1. 架设在 客户端 与 目标服务 之间,用于 代理内网 对 外部 Internet 的连接请求。
    二、Nginx 代理_第1张图片

2. 反向代理

  • 反向代理。
  1. 指 客户端 访问 目标服务器。
    在 目标服务 内部有一个统一 接入网关,将 请求 转发至 后端真正处理的服务器,并返回结果。
  2. 这个过程中,客户端 不需要知道 代理服务器 地址,代理对客户端 是透明的。

  • 应用场景。
  1. 服务架设在 服务器端,通过 缓存 经常被请求的页面 来 缓解服务器压力。
    二、Nginx 代理_第2张图片

3. 正向代理 & 反向代理区别

区别 正向代理 反向代理
代理服务器位置 客户端 与 服务端 都能连接的位置 ⽬标服务器内部
主要作⽤ 屏蔽 客户端IP、集中式缓存、解决 客户端 不能直连 服务端 的问题 屏蔽 服务端 内部实现、负载均衡、缓存
应⽤场景 爬⾍、、Mavennexus 服务 NginxApache 负载均衡应⽤

4. 代理基本配置

  • Nginx 代理,只需要配置 locationproxy_pass 属性即可。
  • 其指向 代理的服务器地址。

# 正向代理到`baidu`服务
location = /baidu.html {
	proxy_pass http://www.baidu.com;
}

# 反向代理至本机的`8080`服务
location /qs/ {
	proxy_pass http://127.0.0.1:8080;
}

5. 代理相关参数

# 代理服务
proxy_pass '代理服务地址';
           
# 是否允许重定向
proxy_redirect off;   

# 传`header`参数至后端服务
proxy_set_header Host $host; 
# 设置`request header`(`$remote_addr`即客户端`IP`地址)
proxy_set_header X-Forwarded-For $remote_addr;
 
# `连接代理服务`超时时间。
proxy_connect_timeout 90;
#proxy_connect_timeout 360000s;
# `请求发送`最大时间。
proxy_send_timeout 90;
#proxy_send_timeout 360000s;#后端服务器数据回传时间(代理发送超时)
# `响应读取`最大时间。(连接成功后,后端响应时间)
proxy_read_timeout 90;
#proxy_read_timeout  360000s;

# nginx与后端`fastcgi server`连接超时时间。
fastcgi_connect_timeout 360000s;
# nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)。
fastcgi_send_timeout 360000s;
# nginx向后端传送响应超时时间(指已完成两次握手后向fastcgi传送响应超时时间)。
fastcgi_read_timeout 360000s;

proxy_buffer_size 4k; 
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; 
proxy_temp_file_write_size 64k;

二、反向代理案例

1. 需要修改本地 hosts 文件

  • 注意:这种配置方式的域名,不会被 DNS 解析。

server {
	# 监听`80`端口 
	listen 80;
	# 配置服务名,代表外网访问的域名
	server_name www.qs.com;	
	# 重定向
	#return 301 https://www.xxx.com$request_uri;	
 
	location / {
		# 目标服务器地址(`tomxat`地址)
	    proxy_pass http://127.0.0.1:8080/;	
        proxy_set_header X-real-ip $remote_addr;
    }
}

2. 无需修改本地 hosts 文件

  • 注意:这种配置方式的域名,会被 DNS 解析,能直接访问。

server {
	listen 443 ssl;
    server_name www.qs.com;
    
    ssl_certificate /usr/local/nginx/ssl/2182670__xxx.com.pem;
    ssl_certificate_key /usr/local/nginx/ssl/2182670__xxx.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;

    location / {
    	proxy_pass http://127.0.0.1:8080/;
        proxy_set_header X-real-ip  $remote_addr;
    }
}

3. 动静分离

upstream backend.qs.com {
	server 172.17.0.4:8080 weight=5;
	server 172.17.0.5:9090 weight=10;
}

upstream static.qs.com {
	server 172.17.0.3:1010;
} 

server {
	# 监听`80`端口 
	listen 80;
	# 配置服务名,代表外网访问的域名
	server_name www.qs.com;		
 
 	location / {
		root /home/nginx ;
        index  index.html index.htm;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        proxy_pass http://static.qs.com;
    }
 	
 	location ~ .*\.(js|css)?$ {
       proxy_pass http://static.qs.com;
    }

	location ~ .*\.(html)?$ {
       proxy_pass http://static.qs.com;
    }

	location ^~ /qs/ {
		# 目标服务器地址(`tomxat`地址)
	    proxy_pass http://backend.qs.com;	
        proxy_set_header X-real-ip  $remote_addr;
    }
}

server {
	# 监听`80`端口
    listen 80;
    # 配置服务名,代表外网访问的域名
    server_name  www.qs.com;
    # 静态目录
    root /root/web;	
    index index.html; 
    error_page    404   /index.html;
    
    # 过滤`/qs`
    location ^~ /qs/ {
    	# 目标服务器地址(tomxat地址)
        proxy_pass http://127.0.0.1:8080;
        
         # 连接代理服务超时时间
        proxy_connect_timeout 1800;
        # 请求发送最大时间
        proxy_send_timeout 1800;
        # 读取最大时间
        proxy_read_timeout 1800;
       
        # 上传上限
        client_max_body_size 2048m;
        proxy_http_version 1.1;  
        
        proxy_set_header Upgrade $http_upgrade;  
        proxy_set_header Connection "Upgrade"; 
         # required for docker client's sake
        proxy_set_header  Host              $http_host; 
        # pass on real client's IP 
        proxy_set_header  X-Real-IP         $remote_addr; 
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
    }
}	

4. 虚拟主机

upstream www.qs.com {
	server 172.17.0.2:8080;
}

upstream blog.qs.com {
	server 172.17.0.3:9090;
}

upstream download.qs.com {
	server 172.17.0.4:7070;
}

server {
	listen       80;
   	server_name  www.qs.com;
   	
   	location / {
    	proxy_pass   http://www.qs.com;
       	index  index.html index.htm;
   	}
}

server {
	listen       80;
   	server_name  blog.qs.com;
   	
   	location / {
    	proxy_pass   http://blog.qs.com;
       	index  index.html index.htm;
   	}
}

server {
	listen       80;
   	server_name  download.qs.com;
   	
   	location / {
    	proxy_pass   http://download.qs.com;
       	index  index.html index.htm;
   	}
}

5. WebService 代理接口

server {
	listen 80;
	server_name qs.com;
	# 项目位置
	root E:/tool/web; 
	index index.html; 
	error_page    404   /index.html;
	
	location ^~ /qs {
		proxy_pass http://192.168.91.132:9999/QSService.asmx?wsdl;
		
		proxy_connect_timeout 1800;
		proxy_send_timeout 1800;
		proxy_read_timeout 1800;
		
		client_max_body_size 2048m;
		proxy_http_version 1.1;  
		
		proxy_set_header X-real-ip $remote_addr;
		proxy_set_header Upgrade $http_upgrade;  
		proxy_set_header Connection "Upgrade"; 
		proxy_set_header  Host              $http_host;   # required for docker client's sake
		proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
		proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
		proxy_set_header  X-Forwarded-Proto $scheme;
	}
}	

你可能感兴趣的:(性能调优,nginx)