工作原理
正向代理:为客户端提供代理
客户端将请求发送给正向代理,然后由代理服务器将请求转发给目标服务器。服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端
反向代理:为服务器端提供代理
客户端将请求发送给反向代理,然后由代理服务器根据一定的规则将请求转发给后端服务器。后端服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端
不同点
- 代理对象
正向代理是为客户端提供代理服务,即服务器不知道真正的客户端是谁
反向代理则是为服务器提供代理服务,即客户端不知道真正的服务器是谁
- 架设位置
正向代理通常是由客户端架设的
反向代理则是由服务器架设的
- 用途和目的
正向代理的主要用途是为在防火墙内的局域网客户端提供访问Internet的途径,侧重于解决访问限制问题
反向代理的主要用途是将防火墙后面的服务器提供给Internet用户访问,其目的在于实现负载均衡、安全防护等
使用场景
正向代理
- 突破网络限制访问特定的网站与服务
- 网络安全,监控和管理网络访问行为,隐藏客户端真实IP,防止敏感数据泄露
- 内容过滤,学校、图书馆等公共场所可以通过正向代理过滤不良内容
- 提高访问速度,代理服务器设置硬盘缓冲区,可以将部分高频请求的响应数据保存到缓冲区中,以提高访问速度
反向代理
- Web应用用反向代理实现负载均衡、安全访问控制以及缓存优化等功能
- Api网关使用反向代理对外部请求进行统一管理和调度,实现API的安全、高效访问
- CDN加速,在全球范围内部署反向代理服务器,实现内容的就近访问和加速传输
nginx配置
nginx所有配置说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| user www www;
worker_processes 8;
error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events { use epoll; worker_connections 65535; }
http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 64k; client_max_body_size 8m;
autoindex on; autoindex_exact_size on; autoindex_localtime on;
sendfile on; tcp_nopush on; tcp_nodelay on;
keepalive_timeout 120;
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k;
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;#选项可以让前端的缓存服务器缓存经过gzip压缩的页面.例如:用squid缓存经过nginx压缩的数据
server { listen 80; server_name ably.com; rewrite ^(.*) https://$server_name$1 permanent; }
server { listen 443 ssl; server_name ably.com;
ssl_certificate C:\WebServer\Certs\certificate.crt; ssl_certificate_key C:\WebServer\Certs\private.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on;
index index.html index.htm index.php; root /data/www/; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }
location /oauth/{ proxy_pass https://localhost:13580/oauth/; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; }
location ~ .*\.(js|css)?$ { expires 1h; }
log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /var/log/nginx/access.log access;
location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } } }
|
负载均衡配置样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
upstream balance { server 192.168.0.1:8080; server 192.168.0.2:8080; }
server { listen 80; server_name example.com;
location / { proxy_pass http://balance; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
|
权重:根据机器配置定义权重.权重越高被分配到的几率越大
1 2 3 4
| upstream balance { server 192.168.0.1:8080 weight=2; server 192.168.0.2:8080 weight=3; }
|
ip_hash:每个请求按访问IP的hash结果分配,同一个IP的访客固定访问
一个后端服务器,有效解决了动态网页存在的session共享问题
1 2 3 4 5
| upstream balance { ip_hash; server 192.168.0.1:8080; server 192.168.0.2:8080; }
|
url_hash:按访问url的hash结果来分配请求,使每个url定向到
同一个后端服务器,可以进一步提高后端缓存服务器的效率
1 2 3 4 5
| upstream balance { hash $request_uri; server 192.168.0.1:8080; server 192.168.0.2:8080; }
|
fair:依据页面大小和加载时间长短智能地进行负载均衡,需要添加nginx-upstream-fair模块
1 2 3 4 5
| upstream balance { fair; server 192.168.0.1:8080; server 192.168.0.2:8080; }
|