Nginx可以做【HTTP、HTTPS】、【ICMP、POP、IMAP】邮件、【RTMP】流媒体的代理。
比如:公司内只有一台电脑可以连入公网,所有的计算机一个代理,通过这台计算机(代理)都可以连入公网。
比如:一个客户端请求一个网站,往往请求的是代理,通过代理给你分配一个服务器,让你访问。
正向代理代理的对象是客户端。
反向代理代理的对象是服务端。
通过该代理,在通过代理访问
Syntax:proxy_pass URL;
Default:默认无
Context:location,if in location,limit_expect
URL写法
(1)HTTP,http://localhost:8000/uri/
(2)HTTPS,https://localhost:8000/uri/
(3)Socket的方式(Linux下进程间通信的方式),http://unix:/tmp/backend.socket:/uri/;
在/etc/nginx/conf.d/
中配置如下两个配置文件:
realserver.conf
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
allow 127.0.0.1;
deny all;
root /opt/app/code2;
index index.html index.htm;
}
#.......
}
注:该文件配置了8080端口,并使用allow与deny配置成服务器私有访问(模拟服务器内网)。
fx_proxy.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ~ /test_proxy.html$ {
proxy_pass http://127.0.0.1:8080;
}
#.......
}
注:该配置配置了公网的80端口,并对test_proxy.html
设置了代理访问内网8080端口。
访问http://192.168.174.132:8080/test_proxy.html
,显示404找不到页面。
访问http://192.168.174.132/test_proxy.html
,默认是80端口,跳转到指定页面,但对于客户端来说,访问的链接(IP)还是80端口的,即对客户是透明的,所以反向代理是服务于服务器。
与反向代理一样。
在/opt/app/code
,新建shen.html,用于测试。
在/etc/nginx/conf.d/
中配置如下两个配置文件:
admin.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
if ( $http_x_fowwarded_for !~* "^192\.168\.174\.132") {
return 403;
}
root /opt/app/code;
index index.html index.htm;
}
#...
}
注:132为Nginx的IP,此处筛选非本机访问均拒绝。
zx_proxy.conf
server {
listen 8081;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://$http_host$request_uri;
}
#....
}
注:此处配置正向代理,端口为8081,模拟代理服务器,访问的请求均通过代理服务器访问。
宿主机IP192.168.174.1,直接访问http://192.168.174.132/shen.html
,显示403禁止访问。
宿主机,设置HTTP代理(192.168.174.132,端口8081),访问http://192.168.174.132/shen.html
成功。
即正向代理为客户端服务,对服务器透明。
尽可能接收多的信息,再返回给客户端,减少IO操作。
Syntax:proxy_buffering on | off;
Default:proxy_buffering on;
Context:http,server,location
扩展:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size
Nginx作为代理服务器,返回301,重定向到另外一个地址,返回给客户端。默认即可。
Syntax:proxy_redirect default(默认);
proxy_redict off(关闭);proxy_redirect redirect replacement(对301地址修改);
Default:proxy_redirect default;
Context:http,server,location
代理访问时,设置的头信息(如,访问控制章节的remote_addr,服务器是获取不到客户端IP的,可通过头信息去一步一步设置,再获取)。
Syntax:proxy_set_header field value;
Default:proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context:http,server,location
扩展:proxy_hide_header、proxy_set_body
作为代理,到后端的一个超时。
Syntax:proxy_connect_timeout time;
Default:proxy_connect_timeout 60s;
Context:http,server,location
扩展:proxy_read_timeout(已经建立连接,Nginx与后端交互,读超过time,则超时)、proxy_send_timeout(接收信息,发送给客户端的超时)
proxy_pass http://127.0.0.1:8080;(反向代理)
proxy_redirect default;(重定向,301,默认配置)
proxy_set_header Host $http_host;(头信息,HOST)
proxy_set_header X-Real-IP $remote_addr;(真实IP,remote_addr)
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;(优先内存)
proxy_max_temp_file_size 256k;(临时文件,内存置换)(--http-proxy-temp-path=/var/cache/nginx/proxy_temp)
配置太多且通用的情况,可以使用文件存放,如proxy_params,使用include filename;
进行包含。