Nginx反向代理模板

以下配置内容均来自文心一言3.5的回答。

以下是一个完整且可用的Nginx反向代理配置示例,专门用于代理一个运行在内网Apache服务器上的HTML游戏。假设内网Apache服务器的IP地址为192.168.1.100,并且该服务器已经能够通过HTTP协议(默认端口80)提供服务。此外,我们假设Nginx服务器配置在一个可公开访问的IP上,或者至少是在一个网络环境中,其中Nginx能够访问内网Apache服务器。

server {  
    listen 80;                     # 监听80端口,这是HTTP的默认端口。用户访问该端口时,Nginx将处理请求。  
    server_name game.example.com;  # 设置服务器名或域名。这是用户访问时需要在浏览器中输入的URL的一部分。  
  
    # 定义请求处理的规则  
    location / {  
        proxy_pass http://192.168.1.100;  # 将所有到该location的请求代理到内网Apache服务器的IP地址上。  
  
        # 设置一些必要的HTTP头,以便后端Apache服务器知道请求是被代理的  
        proxy_set_header Host $host;      # 将请求头中的Host字段转发给后端服务器,通常是用户的原始请求头。  
        proxy_set_header X-Real-IP $remote_addr;  # 将客户端的真实IP地址转发给后端服务器。  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 在X-Forwarded-For请求头中添加客户端IP地址,用于日志记录和审计。  
        proxy_set_header X-Forwarded-Proto $scheme;  # 转发协议(http或https),用于后端服务器确定客户端是否使用了SSL/TLS。  
  
        # 以下可选设置通常用于需要处理WebSocket连接的场景  
        # proxy_http_version 1.1;  
        # proxy_set_header Upgrade $http_upgrade;  
        # proxy_set_header Connection "upgrade";  
  
        # 代理连接/读取/发送超时设置(根据需要调整)  
        # proxy_connect_timeout 300;  
        # proxy_send_timeout 300;  
        # proxy_read_timeout 300;  
  
        # 其他可能的设置,如缓存、缓冲大小等,此处未列出。  
    }  
  
    # 错误页面处理  
    error_page 500 502 503 504 /50x.html;  
    location = /50x.html {  
        root /usr/share/nginx/html;  # 定义错误页面的存放位置。Nginx将从此位置提供50x错误页面。  
    }  
}

listen 80;:指示Nginx监听80端口上的请求。这是HTTP的默认端口,因此大多数HTTP请求都会发送到这个端口。

server_name game.example.com;:定义了Nginx服务器将要响应的服务器名或域名。在浏览器中输入此域名时,Nginx将接受并处理请求。注意,如果服务器配置了多个server块,Nginx将使用server_name来决定哪个块应该处理请求。

location / { … }:这是一个请求处理的容器,/匹配所有请求。在这个块内部,我们定义了如何代理这些请求。

proxy_pass http://192.168.1.100;:指定了代理目标URL,即所有到当前location的请求都将被转发到这个URL。在这个例子中,它是内网Apache服务器的IP地址。

proxy_set_header …;:这些指令用于设置发送到后端服务器的HTTP请求头。Host头保持原样(或修改为Nginx配置中指定的值),X-Real-IP和X-Forwarded-For头用于记录客户端的真实IP地址,X-Forwarded-Proto用于记录客户端使用的协议(HTTP或HTTPS)。

error_page 500 502 503 504 /50x.html;:定义了当Nginx遇到特定HTTP错误代码时应该提供哪个页面。在这个例子中,如果Nginx遇到500、502、503或504错误,它将提供/50x.html页面。

location = /50x.html { … }:这个location块专门用于处理对/50x.html页面的请求。

另外,对于proxy_set_header X-Real-IP $remote_addr; 和 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

这两条指令在Nginx配置中用于向后端服务器传递客户端的IP地址信息,但它们的功能并不完全重合,而是各有其特定的用途和目的。

proxy_set_header X-Real-IP $remote_addr;
这条指令用于将客户端的真实IP地址(即直接连接到Nginx服务器的客户端IP)添加到HTTP请求头中,键名为X-Real-IP。$remote_addr变量包含了发起请求的客户端的IP地址。这个头通常用于后端服务器(如Web应用服务器)来识别原始客户端的IP地址,尤其是在使用了反向代理(如Nginx)的情况下。然而,它只记录了最后一个直接连接到Nginx的客户端的IP地址,如果请求经过了多个代理,则不会包含这些代理的IP地址。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
这条指令用于在HTTP请求头中添加或更新X-Forwarded-For字段,该字段用于记录客户端的原始IP地址以及所有经过的代理服务器的IP地址。$proxy_add_x_forwarded_for变量是一个特殊的Nginx变量,它会自动处理X-Forwarded-For头。如果请求已经包含了X-Forwarded-For头,Nginx会将其值追加到当前客户端的IP地址之后(用逗号分隔);如果请求中没有这个头,Nginx就会简单地将其设置为当前客户端的IP地址。这样,后端服务器就可以通过这个头来追踪请求的来源路径。

X-Real-IP 提供了直接连接到Nginx的客户端的IP地址,但不包含任何代理服务器的信息。X-Forwarded-For 提供了客户端的原始IP地址以及所有经过的代理服务器的IP地址,是一个更全面的记录。

如果你只需要知道直接连接到Nginx的客户端的IP地址,可以使用X-Real-IP。如果你需要知道请求的来源路径(包括所有代理服务器的IP地址),则应该使用X-Forwarded-For。
在实际应用中,通常会同时设置这两个头,以便后端服务器可以根据需要选择使用哪一个。然而,需要注意的是,X-Forwarded-For头可以被客户端伪造,因此在安全敏感的应用中,应该谨慎使用,并结合其他安全措施来验证客户端的真实身份。

如果需要配置SSL,可以参阅Nginx 服务器 SSL 证书安装部署↗