我遇到了这个问题。我最近在 centos 6.7 上安装了 nginx 1.8+ 以及 PHP-FPM (5.3+)。安装很顺利,设置虚拟主机也很好,但是当我创建一个安全站点并将 http 转发到 https 时,麻烦就来了。页面显示 404 未找到。当我检查 nginx 的错误日志时,我发现它在不同的目录中查找,而不是我指定的目录。
这是错误日志
2016/01/22 21:54:29 [error] 4205#0: *1 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 173.245.48.185, server: subdomain.example.com, request: "GET / HTTP/1.1", host: "subdomain.example.com"
使用 SSL 的 nginx 使用/etc/nginx/html/而不是我定义的根/srv/www/默认-www目录。以下是我的 SSL 配置,希望您能帮助我并纠正我所犯的错误。提前致谢 :)
server {
listen 80;
server_name subdomain.example.com;
if ($http_cf_visitor ~ '{"scheme":"http"}') {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443;
server_name subdomain.example.com;
root /srv/www/default-www/;
server_tokens off;
#access_log /var/log/nginx/log/subdomain.example.com.access.log main;
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
location / {
try_files $uri $uri/ /index.php;
#index index.php index.html index.htm;
}
location ~ /(cgi-bin|file_upload|file_assets) {
deny all;
return 404;
}
location = /favicon.ico {
log_not_found off;
}
error_log /var/log/nginx/subdomain.example.com-error.log warn;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass unix:/var/lib/php/socket.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
请注意,我更改了域名并仅提供了示例。我的配置哪里错了?如果您以前遇到过这个问题,请纠正我,或者您可以为像我这样的新手提供任何解决方案。
答案1
您似乎没有启用 SSL 模式。您拥有所有 SSL 配置,但尚未启用 SSL。这是在listen
或ssl
指令中实现的。
listen 443 ssl;
为什么这会导致您观察到的副作用——我不知道。
看这个文件了解更多信息。
答案2
现在没问题了。我使用的是 cloudflares 灵活 SSL,而不是完整 SSL,似乎是它导致了这个问题。当我将其切换到灵活 SSL 时,它工作正常。