教你在 Linux 中设置一个 Nginx 反向代理
来自:入门小站
-
负载均衡
-Nginx可以执行负载均衡,以在代理服务器之间分配客户端的请求,从而提高性能,可伸缩性和可靠性。 -
缓存
-使用Nginx作为反向代理,你可以缓存页面的预渲染版本以加快页面加载时间。它通过缓存从代理服务器的响应接收的内容,并使用它来响应客户端,而不必每次都与代理服务器联系以获取相同的内容。 -
SSL
-Nginx可以充当与客户端连接的SSL端点。它将处理和解密传入的SSL连接并加密代理服务器的响应。 -
Compression
-如果代理服务器未发送压缩的响应,则可以配置Nginx在发送响应之前对其进行压缩 -
减轻DDoS攻击
-你可以将传入请求和每个IP地址的连接数限制为常规用户的典型值。Nginx还允许你根据客户端位置以及请求标头的值(例如"User-Agent"和"Referer")来阻止或限制访问。
先决条件
使用Nginx作为反向代理
server {
listen 80;
server_name www.example.com example.com;
location /app {
proxy_pass http://127.0.0.1:8080;
}
}
proxy_pass
伪指令设置,可以将
HTTP
或
HTTPS
用作协议,域名或IP地址,并使用可选的端口和URI作为地址。
/app
位置传递到到
http://127.0.0.1:8080
处的代理服务器。
/etc/nginx/sites-available
/etc/nginx/conf.d
目录中。
location
和
proxy_pass
指令的工作方式,我们举以下示例:
server {
listen 80;
server_name www.example.com example.com;
location /blog {
proxy_pass http://nodecom:8000/wordpress/;
}
}
http://example.com/blog/my-post
,则Nginx会将请求转发给
http://nodecom:8000/wordpress/my-post
/wordpress/
)时,传递给代理服务器的请求URI将替换为伪指令中指定的URI。如果指定的代理服务器地址没有URI,则完整的请求URI将传递到代理服务器。
传递请求标头header
Host
和
Connection
,并删除空头。
Host
设置为
$proxy_host
变量,
Connection
设置为关闭。
proxy_set_header
指令,后跟header值。你可以在此处找到所有可用请求header及其允许值的列表。如果要防止将header传递到代理服务器,请将其设置为空字符串
""
。
Host
header字段的值更改为
$host
,并通过将其值设置为空字符串来删除
Accept-Encoding
标头字段。
location / {
proxy_set_header Host $host;
proxy_set_header Accept-Encoding "";
proxy_pass http://localhost:3000;
}
将Nginx配置为非HTTP代理服务器的反向代理
-
fastcgi_pass
-FastCGI服务器的反向代理。 -
uwsgi_pass
-反向代理到uwsgi服务器。 -
scgi_pass
-反向代理到SCGI服务器。 -
memcached_pass
-反向代理到 Memcached 服务器。
server {
# ... other directives
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
常见的Nginx反向代理选项
location/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
-
proxy_http_version 1
- 定义用于代理的HTTP协议版本,默认情况下将其设置为1.0。对于Websocket和keepalive
连接,你需要使用1.1版。 -
proxy_cache_bypass $http_upgrade
-设置不从缓存中获取响应的条件。 -
Upgrade $http_upgrade
和Connection "upgrade"
-如果你的应用程序使用Websockets,则这些header字段是必填字段。 -
Host $host
- 按以下优先顺序排列的$host
变量包含:请求行中的主机名,或Host
请求头字段中的主机名,或与请求匹配的服务器名。 -
X-Real-IP $remote_addr
- 将真实的访客远程IP地址转发到代理服务器。 -
X-Forwarded-For $proxy_add_x_forwarded_for
- 包含客户端被代理的每个服务器的IP地址的列表。 -
X-Forwarded-Proto $scheme
- 在HTTPS服务器块中使用时,来自代理服务器的每个HTTP响应都会重写为HTTPS。 -
X-Forwarded-Host $host
- 定义客户端请求的原始主机。 -
X-Forwarded-Port $server_port
- 定义客户端请求的原始端口。
END
官方站点:www.linuxprobe.com
Linux命令大全:www.linuxcool.com
刘遄老师QQ:5604241
Linux技术交流群:2261840
(新群,火热加群中……)
想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!