Nginx学习笔记——场景实践之《代理服务》

代理服务

Nginx可以做【HTTP、HTTPS】、【ICMP、POP、IMAP】邮件、【RTMP】流媒体的代理。

正向代理

Nginx学习笔记——场景实践之《代理服务》_第1张图片
比如:公司内只有一台电脑可以连入公网,所有的计算机一个代理,通过这台计算机(代理)都可以连入公网。

反向代理

Nginx学习笔记——场景实践之《代理服务》_第2张图片
比如:一个客户端请求一个网站,往往请求的是代理,通过代理给你分配一个服务器,让你访问。

正反向的区别

正向代理代理的对象是客户端
反向代理代理的对象是服务端

反向代理

配置语法

通过该代理,在通过代理访问

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;进行包含。

你可能感兴趣的:(Nginx)