我在谷歌上搜索并查看了各种示例 SSL 配置,看起来我已经设置好了,但是有两个问题:
我尝试将主机标头设置为 $host 而不是 $http_host,并且我尝试设置 proxy_redirect 以将 URL 设置为 https,但都没有任何效果。
我的 SSL 配置如下。有人可以告诉我我做错了什么吗?
server {
listen 443;
server_name dev.mysite.com;
access_log /var/log/nginx/dev_mysite_access.log;
error_log /var/log/nginx/dev_mysite_error.log;
ssl on;
ssl_certificate /export/nginx/certs/mysite.com.crt;
ssl_certificate_key /export/nginx/certs/mysite.com.key;
location / {
# give site more time to respond
proxy_read_timeout 120;
# needed to forward user's IP address
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_pass http://localhost:8081; …
Run Code Online (Sandbox Code Playgroud) 我遇到了多个网站共享一个 IP 地址的情况。我让 nginx 接受请求并将它们传递给实际上为站点提供服务的 Apache。我知道这里并不真正需要 Apache,但由于历史原因,它是这样设置的,如果不需要,我宁愿不更改它。
事情的设置方式,nginx 接受对 example.com 的请求并将其传递给 Apache,如下所示:
server {
listen 80;
server_name example.com www.example.com;
access_log /var/log/nginx/example.log;
error_log /var/log/nginx/example.log;
location / {
proxy_read_timeout 120;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8100;
}
}
Run Code Online (Sandbox Code Playgroud)
在 httpd.conf 中,我们有
<VirtualHost localhost:8100>
ServerName www.example.com
ServerAlias example.com
Options Indexes
DocumentRoot /export/sites/example/live
ServerAdmin info@example.net
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都运行良好,但我已经向站点添加了一个 PHP 脚本(不是我自己的),但它无法获得正确的主机名。$_SERVER["HTTP_HOST"] 和/或 $_SERVER['SERVER_NAME'] 正在返回 localhost:8100 而不是 example.com。
是否可以进行设置以便 PHP 获得正确的主机名?