Nginx反向代理背后的Nginxconfiguration

我有一个带有Docker的Nginx,用于使用HTTP和HTTPS的开发环境,具体configuration如下:

listen 80; listen 443 ssl; set_real_ip_from 10.0.0.0/8; real_ip_header X-Real-IP; real_ip_recursive on; location / { try_files $uri @rewriteapp; } location @rewriteapp { rewrite ^(.*)$ /app.php/$1 last; } location ~ ^/(app|app_dev|app_test|config)\.php(/|$) { fastcgi_pass php-upstream; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS $https; } 

我想testing我的本地环境中的HTTP和HTTPS,但在生产中,我有一个Nginx反向代理前面:

 upstream app_upstream { server app:80; } server { server_name $APP_DOMAIN; listen 443 ssl; ssl_certificate /run/secrets/app_cert.pem; ssl_certificate_key /run/secrets/app_key.pem; proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://app_upstream; } } 

我希望反向代理只接受HTTPS并转发到应用程序nginx,但是我的PHP应用程序正在接收$ _SERVER ['HTTPS'] =“”

我也想只在反向代理上保留SSL证书,我如何将HTTPS从反向代理传递给nginx到PHP?

HTTPSvariables设置为$https (根据到后端服务器的连接设置,它始终是HTTP),但是您希望根据转发的连接来设置它。

您可以使用X-Forwarded-Proto标头使用map设置HTTPSvariables。 例如:

 map $http_x_forwarded_proto $https_flag { default off; https on; } server { ... location ~ ^/(app|app_dev|app_test|config)\.php(/|$) { ... fastcgi_param HTTPS $https_flag; ... } } 

请参阅此文档了解更多