2016-10-21 3 views
2

У меня есть ситуации, где хотя весь трафик должен перенаправить HTTP на HTTPS исключением случаев, когда контекст/публикацииNginx Условный редирект на HTTPS

HTTP {mydomain.com/*} должна заставить перенаправление на HTTPS {mydomain.com }, но не в том случае, если URL-адрес http {mydomain.com/publish}, перенаправления не требуется.

Заранее спасибо

ответ

1

Лучший способ сделать перенаправление в Nginx использует несколько server{} блоков. Вы должны быть хорошо с чем-то вроде этого:

server { 
    server_name mydomain.com; 
    listen 80; 

    location/{ 
    return 301 https://$server_name$request_uri; 
    } 
    location /publish { 
    # Here goes your usual request handling, with proxying and so on 
    # Nested location can be used if needed 
    } 
} 

server { 
    server_name mydomain.com; 
    listen 443; 
    ssl on; 
    # Here goes all your request handling 
} 
0

Приведенный выше код на @Hardy это хорошо с двумя серверами, другой способ может быть поместить код переадресации, если блок в начале,

server { 
    listen 80; 
    server_name mydomain.com; 
    if ($request_uri ~ "publish") { 
    return 301 https://$server_name$request_uri; 
    } 
    ... 
    location/{ 
    ... 
    } 
    ... 
} 

server { 
    listen 443; 
    server_name mydomain.com; 
    ... 
} 

Если вам это нужно, чтобы быть только с одним сервером, вы можете определить оба порта на одном сервере и HTTPS требуется код, а затем удалите второй сервер, следующим образом,

map $request_uri $tmp_do_redirect { 
    "~publish" 1; 
    default 0; 
} 
map $scheme $do_redirect { 
    "https" 0; 
    default $tmp_do_redirect; 
} 
server { 
    listen 80; 
    listen 443; 
    server_name mydomain.com; 
    #https code, like ssl, certificate, etc# 
    ... 
    if ($do_redirect = "1") { 
    return 301 https://$server_name$request_uri; 
    } 
    ... 
    location/{ 
    ... 
    } 
    ... 
} 
Смежные вопросы