我有一台 Nginx 服务器接受 443 流量并将该流量不加改变地转发到另一台充当 SSL 终止点的 Nginx 服务器。
我原本希望通过 $realip_remote_addr 值获取原始客户端的 IP 地址(用于日志记录) - 但运气不佳。X-Real-IP 和 X-Forwarded-For 标头也是如此。
是否有一个流程或其他值可供我的 SSL 终止服务器使用,以便更好地保存我的日志?
以下是 Nginx“路由器”配置:
stream {
log_format short '$remote_addr - $realip_remote_addr - [$time_local] '
'$status ';
access_log /var/log/nginx/access.log short;
error_log /var/log/nginx/error.log;
map $ssl_preread_server_name $name {
alpha.example.com alpha_backend;
beta.example.com beta_backend;
}
upstream alpha_backend {
server 192.168.11.203:443;
}
upstream beta_backend {
server 192.168.11.201:443;
}
server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
}
以下是 SSL 终止服务器的 Nginx 配置:
server {
listen 443 ssl;
root /var/www/alpha.example.com/html;
index index.html index.htm;
server_name alpha.example.com www.alpha.example.com;
ssl_certificate_key /etc/letsencrypt/live/alpha.example.com/privkey.pem;
ssl_certificate /etc/letsencrypt/live/alpha.example.com/fullchain.pem;
ssl_trusted_certificate /etc/letsencrypt/live/alpha.example.com/cert.pem;
location / {
try_files $uri $uri/ =404;
}
}
server {
if ($host = alpha.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name alpha.example.com;
return 301 https://$server_name$request_uri;
# return 404; # managed by Certbot
}
我的工作条件是两个 SSL 终止服务器(alpha 和 beta)必须位于单个 IP 地址后面,并且是具有单独日志的独立服务器。
我已阅读有关“流”上下文的文档。“短”log_format 是修剪掉 Nginx 在包含时报告为错误的变量的结果。如果我可以将 $remote_addr 或 $realip_remote_addr 从“路由器”服务器传递到 alpha 和 beta,我会很高兴。其他值就更好了。