Я читал и следил этот вопрос чтобы настроить 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. Видеть док.