Nginx: Перенаправьте и http и корень https к подкаталогу

Я пытаюсь перенаправить корневой домен и для http и для https в nginx к тому же подкаталогу (https):

Так, например.

http://example.com -> https://example.com/subdirectory

https://example.com -> https://example.com/subdirectory

Столь простой, как это казалось мне, я изо всех сил пытаюсь достигнуть этого. Я попытался использовать изменения, переписывает, и возвратитесь 301, но всегда заканчивайте с циклом перенаправления.

Моя текущая конфигурация (порождение цикла):

server {
        listen      80;
        server_name example.com;
        return 301 https://$server_name/subdirectory;
        }
server {
        listen 443 ssl spdy;
        server_name example.com;
        return 301 https://$server_name/subdirectory;
    }

Так в основном я пытаюсь перенаправить к тому же подкаталогу на https от корневого домена, требуют ли корневой домен через http или https.

2
задан 29 September 2014 в 11:25
4 ответа

Denne konfiguration gør, hvad du vil:

server {
    listen 80:
    server_name example.com;

    return 301 https://$server_name/subdirectory;
}

server {
    listen 443;
    server_name example.com;

    location = / {
        return 301 https://$server_name/subdirectory;
    }
}

= / -specifikationerne betyder en fuld match, så den matcher kun den nøjagtige rod-URI på den virtuelle server.

7
ответ дан 3 December 2019 в 09:04

Det virker åbenbart ikke, hvis du ikke ' t ekskluder placeringsunderkatalog fra denne adfærd for ssl vhost.

server {

    listen 80;
    server_name example.com;

    return 301 https://$server_name/subdirectory;

}

server {

    listen 443 ssl spdy;
    server_name example.com;

    location /subdirectory {
        # Your stuff
    }

    location = / {
        return 301 https://$server_name/subdirectory;
    }

}
0
ответ дан 3 December 2019 в 09:04
server {
    listen 80:
    server_name example.com;

    return 301 https://$server_name/subdirectory/;
}

server {
    listen 443;
    server_name example.com;

    location = / {
        return 301 https://$server_name/subdirectory/;   
    }
}

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

.
0
ответ дан 3 December 2019 в 09:04

Другой подход с некоторыми "хитростями" ...

server {
    access_log /var/log/nginx/<DOMAIN_NAME>-access.log;
    error_log /var/log/nginx/<DOMAIN_NAME>-error.log;
    listen <PORT_PROXY>;
    server_name <DOMAIN_NAME>;

    location /<SUBDIRECTORY> {
        proxy_pass http://<RESOURCE_IP>:<RESOURCE_PORT>/<SUBDIRECTORY>;
        proxy_redirect off;
        proxy_set_header Host $host:<PORT_PROXY>;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location = / {
        return 301 https://$server_name/<SUBDIRECTORY>;
    }

}

Спасибо! = D

0
ответ дан 28 December 2019 в 22:09

Теги

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