Как вызвать или перенаправить к SSL в nginx?

Можно ли удаленно контролировать его с perfmon? Это может избежать проблем скорости отклика попытки запустить taskman локально.

221
задан 23 June 2016 в 14:22
8 ответов

Согласно nginx ловушкам, немного лучше опустить ненужное получение, с помощью $request_uri вместо этого. В этом случае добавьте вопросительный знак, чтобы препятствовать тому, чтобы nginx удвоил любой запрос args.

server {
    listen      80;
    server_name signup.mysite.com;
    rewrite     ^   https://$server_name$request_uri? permanent;
}
144
ответ дан 28 November 2019 в 19:13

Удостоверьтесь, что Вы устанавливаете 'безопасный' на любых cookie, или иначе они будут отправлены на Запросе HTTP и могли быть захвачены за инструмент как Firesheep.

3
ответ дан 28 November 2019 в 19:13

При использовании нового двойного HTTP и определения сервера HTTPS можно использовать следующее:

server {
    listen   80;
    listen   [::]:80;
    listen   443 default ssl;

    server_name www.example.com;

    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;

    if ($ssl_protocol = "") {
       rewrite ^   https://$server_name$request_uri? permanent;
    }
}

Это, кажется, работает на меня и не вызывает циклы перенаправления.

Править:

Замененный:

rewrite ^/(.*) https://$server_name/$1 permanent;

с Pratik переписывают строку.

56
ответ дан 28 November 2019 в 19:13

Лучший способ, описанный в официальном руководстве , - использовать директиву return :

server {
    listen      80;
    server_name signup.mysite.com;
    return 301 https://$server_name$request_uri;
}
257
ответ дан 28 November 2019 в 19:13

Это правильный и наиболее эффективный способ, если вы хотите сохранить все в одном серверном блоке:

server {
    listen   80;
    listen   [::]:80;
    listen   443 default_server ssl;

    server_name www.example.com;

    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
}

Все остальное выше, используя «перезаписать» или «если ssl_protocol» и т. Д., Работает медленнее и хуже.

Здесь то же самое, но даже более эффективно, поскольку выполняется перезапись только по протоколу http, это позволяет избежать проверки переменной $ scheme при каждом запросе. А если серьезно, это такая мелочь, что вам не нужно их разделять.

server {
    listen   80;
    listen   [::]:80;

    server_name www.example.com;

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

    server_name www.example.com;

    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;
}
119
ответ дан 28 November 2019 в 19:13

Yet another variant, that preserves the Host: request header and follows the "GOOD" example on nginx pitfalls:

server {
    listen   10.0.0.134:80 default_server;

    server_name  site1;
    server_name  site2;
    server_name  10.0.0.134;

    return 301 https://$host$request_uri;
}

Here are the results. Note that using $server_name instead of $host would always redirect to https://site1.

# curl -Is http://site1/ | grep Location
Location: https://site1/

# curl -Is http://site2/ | grep Location
Location: https://site2/


# curl -Is http://site1/foo/bar | grep Location
Location: https://site1/foo/bar

# curl -Is http://site1/foo/bar?baz=qux | grep Location
Location: https://site1/foo/bar?baz=qux
27
ответ дан 28 November 2019 в 19:13
server {
    listen x.x.x.x:80;

    server_name domain.tld;
    server_name www.domian.tld;
    server_name ipv4.domain.tld;

    rewrite     ^   https://$server_name$request_uri? permanent;
}

Мне кажется, это работает лучше. x.x.x.x ссылается на IP вашего сервера. Если вы работаете с Plesk 12, вы можете сделать это, изменив файл "nginx.conf" в каталоге "/var/www/vhosts/system/domain.tld/conf" для любого желаемого вами домена. Не забудьте перезапустить службу nginx после сохранения конфигурации.

.
1
ответ дан 28 November 2019 в 19:13

Думаю, это это самое простое решение. Принудительно направляет трафик как без HTTPS, так и без WWW только на HTTPS и www.

server {
    listen 80;
    listen 443 ssl;

    server_name domain.tld www.domain.tld;

    # global HTTP handler
    if ($scheme = http) {
        return 301 https://www.domain.tld$request_uri;
    }

    # global non-WWW HTTPS handler
    if ($http_host = domain.tld) {
        return 303 https://www.domain.tld$request_uri;
    }
}

РЕДАКТИРОВАТЬ - апр 2018: Решение без IF можно найти в моем сообщении здесь: https://stackoverflow.com/a/36777526/6076984

0
ответ дан 28 November 2019 в 19:13

Теги

Похожие вопросы