Nginx SSL 重定向仅适用于一个特定页面

Nginx SSL 重定向仅适用于一个特定页面

我读过并关注这个问题为了配置 nginx 以强制对一个页面(XenForo 的 admin.php)使用 SSL,它对一些网站管理员来说运行良好,但对我而言却不行。我想知道是否有人对如何改进此配置有任何建议:

...

ssl_certificate      example.net.crt;
ssl_certificate_key  example.key;

server {
    listen 80 default;
    listen 443 ssl;

    server_name www.example.net example.net;
    access_log /srv/www/example.net/logs/access.log;
    error_log /srv/www/example.net/logs/error.log;

    root /srv/www/example.net/public_html;

    location / {
        if ( $scheme = https ){
            return 301 http://example.net$request_uri;
        }
        try_files $uri $uri/ /index.php?$uri&$args;
        index index.php index.html;
    }

    location ^~ /admin.php {
        if ( $scheme = http ) {
            return 301 https://example.net$request_uri;
        }
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS on;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

...

看来location ^~ /admin.php块中的额外信息是不必要的,有人知道避免重复代码的简单方法吗?如果没有它,它会跳过 php 块并仅返回 php 文件。

目前,当我导航到 时,它在 Firefox 中正确应用 https admin.php。在 Chrome 中,它会下载页面admin.php。当在 Firefox 中返回非 https 网站时,它不会正确返回 http,而是保持 SSL。就像我之前说的,这只发生在我身上,其他管理员可以来回切换而不会出现问题。

这是我这边的问题,我可以修复吗?有谁知道有什么方法可以减少配置中的重复配置选项吗?提前谢谢!

编辑:清除缓存/cookie 似乎有效。这是进行 http/https 重定向的正确方法吗?我边做边想。

答案1

我可以减少配置中的重复配置选项的方法

可能使用 @-named 位置。请参阅文档

答案2

这可能与此处解释的错误有关https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

我建议你使用特定的 HTTP/HTTPS 块,例如

server {
  listen 80;
  server_name www.example.net example.net;

  return 301 https://$server_name$request_uri;
}
server {
  listen 443 ssl;

  server_name www.example.net example.net;
  access_log /srv/www/example.net/logs/access.log;
  error_log /srv/www/example.net/logs/error.log;

  root /srv/www/example.net/public_html;

  location / {
    try_files $uri $uri/ /index.php?$uri&$args;
    index index.php index.html;
  }

  location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME 
        $document_root$fastcgi_script_name;
        }
  }

相关内容