### Nginx代理
2017-01-07 15:03
134 查看
Nginx代理
代理其实细分为三种,分别为正向代理、反向代理,透明代理,而我们经常说的“代理”,其实是指的正向代理正向代理
当我们要访问Google时,因为GFW缘故,所以国内的主机是访问不了的,而这时有一台主机能够访问到,这时就可以通过这台主机代理来访问,这就是简单理解正向代理的含义。所以客户端是知道正向代理服务器存在的,而且客户端要进行一些设置才能使用正向代理的
正向代理优点:
1、访问无法访问的资源,例如翻墙
2、控制访问权限,例如限制不同用户访问不同的资源
nginx正向代理实现:
server { resolver 8.8.8.8; listen 8080; location / { proxy_pass $scheme://$host$request_uri; proxy_set_header Host $http_host; } } 1、配置解析服务器地址 2、不能配置server_name 3、proxxy_pass指令需要注意 目前不支持代理https,nginx是可以处理https请求的,但是正向代理不支持https,因为客户端同nginx代理服务器之间建立连接失败,可以是squid实现。
nginx正向代理踩的坑:
server { listen 80; resolver 223.5.5.5; location / { root html; 记得要注释掉 index index.html index.htm; 要注释掉 proxy_pass $scheme://$host$request_uri; proxy_set_header Host $http_host; } } 设置的代理端口是80端口,但是没有将root和index去掉,当客户端设置好了代理后,因为此时服务器80端口的请求因为root和index的原因,还是会去html这个目录下寻找文件,导致出现解析不了的问题,所有记得要注释掉这两行。 如果代理是正确的,可以去查看access.log日志文件,会有相关的记录,例如: 222.73.202.226 - - [07/Jan/2017:11:05:54 +0800] "GET http://www.tony9.cn/?p=83 HTTP/1.1" 200 19831 "http://www.tony9.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36"
总结:
nginx总体来说正向代理的性能是不高的,因为首先nginx不支持CONNECT,所有不支持https,然后nginx正向代理需要dns解析,而nginx的设计者当初也不是用于正向代理的,所有如果追求正向代理高性价,可以去尝试使用squid。
反向代理
反向代理正好相反,客户端不知道反向代理服务器的存在,反向代理服务器相对而言更像客户端要访问的原始服务器作用:
1、保护并隐藏原始服务器,例如原始服务器的防火墙只允许反向代理服务器进行访问
2、实现负载均衡
3、实现缓存
1、nginx 反向代理实现:
location / { proxy_pass http://test10.tony9.cn; 后端服务器 proxy_set_header X-Real-IP $remote_addr; 设置日志为客户端IP,不是代理服务器IP }
2、nginx 负载均衡实现:
upstream test10.tony9.cn{ server 192.168.0.236; 后端服务器IP server 192.168.0.79; } server { location / { proxy_pass http://test10.tony9.cn; 负载均衡的名称为test10.tony9.cn } }
upstream支持的状态参数:
1、down,表示当前的server暂时不参与负载均衡。
2、backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
3、max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
4、fail_timeout,在经历了max_fails次失败后,暂停服务的时间。
当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能backup。
例如进行健康状态检查,max_fails可以和fail_timeout一起使用:
upstream webservers { server 192.168.0.236 max_fails=2 fail_timeout=2; server 192.168.0.79 max_fails=2 fail_timeout=2; }
配置sorry_server,当后端两台都不能访问时,可以让其访问backup
upstream webtest { server 192.168.0.236 max_fails=2 fail_timeout=2; server 192.168.0.79 max_fails=2 fail_timeout=2; server 127.0.0.1:8000 backup; } location / { proxy_pass http://webtest; } 在代理服务器上在创建一个虚拟server: server { listen 8000; server_name localhost; location / { root /usr/local/nginx/html2; index index.html index.htm; } } 创建8000服务器的根目录: mkdir /usr/local/nginx/html2 echo "<h1>sorry</h1>" /usr/local/nginx/html2/index.html
负载均衡算法:
1、轮询(默认),每个请求按时间顺序逐一分配到不同的后端服务器,Weight值越大,分配到的访问机率越高
2、ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
3、nginx缓存实现:
upstream webtest { server 192.168.0.236 max_fails=2 fail_timeout=2; server 192.168.0.79 max_fails=2 fail_timeout=2; server 127.0.0.1:8000 backup; } proxy_cache_path /data/nginx/cache/webtest levels=1:2 keys_zone=webtest:10m max_size=1g ; 指定缓存的路径和一些其他参数 server { add_header X-Via $server_addr; add_header X-Cache $upstream_cache_status; location / { proxy_cache my_cache; 启用缓存 proxy_pass http://webtest; proxy_cache_valid 200 10m; } } proxy_cache_valid一定要设置,这个是为不同的应答设置不同的缓存时间,不设置将不会缓存 还有要检测缓存状态,可以添加http头部,add_header 之后需要将缓存目录建起来:mkdir /path/to/cache/my_cache
相关文章推荐
- nginx代理指定目录
- 访问Nginx发生SSL connection error的一种情况
- Nginx+Naxsi部署专业级Web应用防火墙
- CentOS 6.2实战部署Nginx+MySQL+PHP
- nginx中http核心模块的配置指令2
- nginx中http核心模块的配置指令3
- nginx中http核心模块的配置指令4
- nginx中http的fastcgi模块的配置指令1
- Apache select和Nginx epoll模型区别
- Nginx 学习笔记(一)
- 网站502与504错误分析
- 用zabbix监控nginx_status状态
- 代理服务器的路由分析
- 艰难完成 nginx + puma 部署 rails 4的详细记录
- 把Lua编译进nginx步骤方法
- web 应用中常用的各种 cache详解
- 利用python自动生成docker nginx反向代理配置
- Linux系统上配置Nginx+Ruby on Rails+MySQL超攻略