server {
listen 127.0.0.1:80;
...
}
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
...
}
Мне тут автор вопроса сказал что код дублировать плохо), ну чтож, вот решение без дублирования)
server {
listen 80;
listen 443 ssl;
set $https "0";
if ($scheme != "https") { set $https "A"; }
if ($remote_addr != "127.0.0.1") { set $https "${https}B"; }
if ($https = "AB") { rewrite ^ https://$http_host$request_uri? permanent; }
...
}
А ещё можно сделать вариант с map
map "$scheme:$remote_addr" $https {
"https:*" 0;
"http:127.0.0.1" 0;
default 1;
}
server {
listen 80;
listen 443 ssl;
if ($https) { rewrite ^ https://$http_host$request_uri? permanent; }
...
}
Ещё вариант через include
server {
listen 127.0.0.1:80;
include vhost.conf;
}
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
include vhost.conf;
}
Да вариаций на самом деле много))
P.S. ВНИМАНИЕ! Код писался на коленке и на память, проверяйте перед использованием, но думаю цель, а именно показать принцип использования он выполнил.