发布于  更新于 

NGINX反向代理服务器

科普时间,反向代理服务器是什么?

反向代理服务器,是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向。

大白话就是我想要找张三问事情,但是我联系不到张三,我通过另一个人以托话的形式让别人帮我问张三,并把结果告诉我。

(一)开始前的准备

1.1 安装nginx

方便起见,使用docker服务安装 nginx

1
docker pull nginx    #默认使用最新的

受限于网络原因,可能拉取比较慢,稍等片刻

拉取成功
拉取成功

1.2 配置映射目录

克隆nginx配置到本地

1
git clone https://gitea.xiaokeaii.top/yinxiaolong/nginx_proxy.git

1.3 运行

1.3.1 进入到nginx目录

1
cd nginx_proxy/nginx

1.3.2 启动容器

启动容器命令如下:

1
2
3
4
5
docker run -p 8080:80 --name nginx_proxy \
-v `pwd`/conf.d:/etc/nginx/conf.d \
-v `pwd`/html:/usr/share/nginx/html \
-v `pwd`/logs:/var/log/nginx/ \
nginx

-p 8080:80表示将主机的8080端口映射到容器的80端口。
--name nginx_proxy表示将容器命名为nginx_proxy,方便后续使用。
-v 是将主机目录映射到容器目录,其中pwd表示当前目录。
nginx 表示镜像名称。

运行成功
运行成功

不要关闭命令窗口,因为容器还在运行中,如果关闭命令窗口,容器将会停止运行。

1.3.3 查看容器运行状态

命令如下:

1
docker ps
查看容器运行状态
查看容器运行状态

以上安装完成后,我们就可以通过浏览器访问http://localhost+端口来访问nginx服务器了。

访问nginx服务器
访问nginx服务器

热身结束,下面进入正题

(二)配置反向代理服务器

2.1 官网地址

关于反向代理服务器的配置地址如下:

2.2 简单配置

2.2.1 修改配置文件

修改conf文件下的default.conf配置

1
2
3
4
5
6
7
server {
listen 80; # 端口请勿更改
server_name localhost;
location / {
proxy_pass https://www.xiaokeaii.top;
}
}

以上配置表示将http://localhost代理到 https://www.xiaokeaii.top,访问http://localhost时,将会被代理到https://www.xiaokeaii.top

2.2.2 重启容器

使用以下命令重启容器:(方案一)

1
docker restart nginx_proxy

或者关闭之前打开的命令行窗口,再次启动容器。使用ctrl + c关闭命令行窗口。 (方案二)

停止容器
停止容器

重启容器:

1
docker start nginx_proxy # nginx_proxy为容器名称

2.2.3 访问

访问http://localhost+端口,即可看到效果。

2.3 常用参数(参数太多,之后再补充详细使用)

2.3.1 proxy_pass

指定反向代理后端服务器地址,语法:

1
2
3
Syntax:	proxy_pass address; # 代理服务器地址
Default:
Context: server

指定要代理的服务器地址,可以是域名,也可以是IP地址,还可以使用unix协议。 这个没啥说的,常用。

2.3.2 proxy_connect_timeout

指定连接后端服务器超时时间,语法:

1
2
3
Syntax:	proxy_connect_timeout time;
Default: 60s
Context: server, location # Context意思是作用域,server表示服务器,location表示路径

指定连接后端服务器超时时间,单位为秒。默认时间为60秒。默认就行。

2.3.3 proxy_read_timeout

指定读取后端服务器响应超时时间,语法:

1
2
3
Syntax:	proxy_read_timeout time;
Default: 60s
Context: server, location

指定读取后端服务器响应超时时间,单位为秒。默认时间为60秒。默认就行。

2.3.4 proxy_send_timeout

指定向后端服务器发送请求超时时间,语法:

1
2
3
Syntax:	proxy_send_timeout time;
Default: 60s
Context: server, location

指定向后端服务器发送请求超时时间,单位为秒。默认时间为60秒。默认就行。

2.3.5 proxy_buffer_size

指定缓冲区大小,语法:

1
2
3
Syntax:	proxy_buffer_size size;
Default: 16k
Context: server, location

指定缓冲区大小,单位为字节。默认大小为16k。

2.3.6 proxy_buffers

指定缓冲区数量,语法:

1
2
3
Syntax:	proxy_buffers number size;
Default: 4 32k
Context: server, location

指定缓冲区数量和缓冲区大小。默认数量为4,大小为32k。

2.3.7 proxy_busy_buffers_size

指定缓冲区空闲大小,语法:

1
2
3
Syntax:	proxy_busy_buffers_size size;
Default: 16k
Context: server, location

指定缓冲区空闲大小,单位为字节。默认大小为16k。

2.3.8 proxy_max_temp_file_size

指定临时文件大小,语法:

1
2
3
Syntax:	proxy_max_temp_file_size size;
Default: 1m
Context: server, location

指定临时文件大小,单位为字节。默认大小为1m。

2.3.9 proxy_pass_request_body

是否将请求体传递给后端服务器,语法:

1
2
3
Syntax:	proxy_pass_request_body on|off;
Default: off
Context: server, location

指定是否将请求体传递给后端服务器。默认不传递。

2.3.10 proxy_set_header

设置请求头,语法:

1
2
3
Syntax:	proxy_set_header field value;
Default:
Context: server, location

设置请求头,可以设置多个请求头。常用。
主要有以下几种设置请求头:

  • Host:指定请求头Host的值,即请求的域名。
  • X-Real-IP:指定请求头X-Real-IP的值,即请求的IP地址。
  • X-Forwarded-For:指定请求头X-Forwarded-For的值,即请求的IP地址。

2.3.11 proxy_hide_header

隐藏请求头,语法:

1
2
3
Syntax:	proxy_hide_header field;
Default:
Context: server, location

隐藏请求头,可以隐藏多个请求头。

2.3.12 proxy_pass_request_headers

是否将请求头传递给后端服务器,语法:

1
2
3
Syntax:	proxy_pass_request_headers on|off;
Default: off
Context: server, location

指定是否将请求头传递给后端服务器。默认不传递。

2.3.13 proxy_buffering

是否开启缓冲区,语法:

1
2
3
Syntax:	proxy_buffering on|off;
Default: on
Context: server, location

指定是否开启缓冲区。默认开启。

2.3.14 proxy_ignore_client_abort

是否忽略客户端中断连接,语法:

1
2
3
Syntax:	proxy_ignore_client_abort on|off;
Default: off
Context: server, location

指定是否忽略客户端中断连接。默认不忽略。

2.3.15 proxy_intercept_errors

是否拦截错误,语法:

1
2
3
Syntax:	proxy_intercept_errors on|off;
Default: off
Context: server, location

指定是否拦截错误。默认不拦截。

2.3.16 proxy_next_upstream

指定下一次请求的处理方式,语法:

1
2
3
Syntax:	proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
Default:
Context: server, location

指定下一次请求的处理方式。

2.3.17 proxy_redirect

重定向,语法:

1
2
3
Syntax:	proxy_redirect [exact] [code] url;
Default:
Context: server, location

重定向。

2.3.18 proxy_redirect_errors

重定向错误,语法:

1
2
3
Syntax:	proxy_redirect_errors [code] url;
Default:
Context: server, location

重定向错误。

2.3.19 proxy_set_body

设置响应体,语法:

1
2
3
Syntax:	proxy_set_body value;
Default:
Context: server, location

设置响应体。

2.3.20 proxy_ssl_certificate

指定SSL证书,语法:

1
2
3
Syntax:	proxy_ssl_certificate file;
Default:
Context: server, location

指定SSL证书。

2.3.21 proxy_ssl_certificate_key

指定SSL证书密钥,语法:

1
2
3
Syntax:	proxy_ssl_certificate_key file;
Default:
Context: server, location

指定SSL证书密钥。

2.3.22 proxy_ssl_session_reuse

是否复用SSL会话,语法:

1
2
3
Syntax:	proxy_ssl_session_reuse on|off;
Default: off
Context: server, location

指定是否复用SSL会话。默认不复用。

2.3.23 proxy_ssl_protocols

指定SSL协议,语法:

1
2
3
Syntax:	proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Default: TLSv1 TLSv1.1 TLSv1.2
Context: server, location

指定SSL协议。默认支持TLSv1、TLSv1.1和TLSv1.2。

2.3.24 proxy_ssl_ciphers

指定SSL加密算法,语法:

1
2
3
Syntax:	proxy_ssl_ciphers "cipher list";
Default:
Context: server, location

指定SSL加密算法。

2.3.25 proxy_ssl_verify

是否验证SSL证书,语法:

1
2
3
Syntax:	proxy_ssl_verify on|off;
Default: on
Context: server, location

指定是否验证SSL证书。默认验证。

2.3.26 proxy_ssl_verify_depth

指定SSL证书验证的最大深度,语法:

1
2
3
Syntax:	proxy_ssl_verify_depth number;
Default: 1
Context: server, location

指定SSL证书验证的最大深度。默认深度为1。