nginx 1.8.0 ssl 配置根位置出现意外行为

nginx 1.8.0 ssl 配置根位置出现意外行为

我遇到了这个问题。我最近在 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。这是在listenssl指令中实现的。

listen 443 ssl;

为什么这会导致您观察到的副作用——我不知道。

这个文件了解更多信息。

答案2

现在没问题了。我使用的是 cloudflares 灵活 SSL,而不是完整 SSL,似乎是它导致了这个问题。当我将其切换到灵活 SSL 时,它工作正常。

相关内容