Назад | Перейти на главную страницу

Перенаправление SSL Nginx только для одной конкретной страницы

Я читал и следил этот вопрос чтобы настроить nginx для принудительного использования SSL для одной страницы (admin.php для XenForo), и он хорошо работает для некоторых администраторов сайта, но не для меня. Мне было интересно, есть ли у кого-нибудь совет, как улучшить эту конфигурацию:

...

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.

В настоящее время он правильно применяет https в Firefox, когда я перехожу к admin.php. В Chrome он загружает admin.php страница. При возврате на сайт без https в Firefox он не возвращается правильно на http, но остается как SSL. Как я уже сказал ранее, это происходит только со мной, другие администраторы могут без проблем переходить туда и обратно.

Могу ли я исправить эту проблему с моей стороны? И кто-нибудь знает, как я могу уменьшить количество повторяющихся параметров конфигурации в конфигурации? Заранее спасибо!

РЕДАКТИРОВАТЬ: очистка кеша / файлов cookie, похоже, сработала. Это правильный способ перенаправления http / https? Я вроде как придумал это по ходу дела.

Это может быть связано с ошибкой, описанной здесь 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;
        }
  }

способы уменьшить количество повторяющихся параметров конфигурации в конфигурации

Возможно использование @-named location. Видеть док.