nginx перенаправляет все http на https с исключениями

Я хотел бы перенаправить весь http-трафик на https с несколькими исключениями. Все, что содержит /exception/ в URL-адресе, я бы хотел оставить на http.

Попробовали следующее, предложенное https://stackoverflow.com/questions/8426299/redirect-all-http-to-https-in-nginx-except-one-file

но это не работает. URL-адреса /exception/ будут переданы из nginx в apache для некоторой обработки php в среде laravel, но это не должно иметь значения.

Любые предложения по улучшению высоко ценятся!

server {
    listen 127.0.0.1:80;

    location / {
        proxy_pass http://127.0.0.1:7080;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;
    }

    location /exception/ {
        # empty block do nothing
        # I've also tried adding "break;" here
    }

    return 301 https://localhost$request_uri;
}

person mba12    schedule 20.01.2015    source источник


Ответы (1)


Nginx находит самое длинное совпадающее местоположение и обрабатывает его первым, но ваш возврат в конце блока сервера обрабатывался независимо. Это перенаправит все, кроме /exception/, которое передается вверх по течению.

server { 
    listen 127.0.0.1:80;
    access_log off;

    location / {
        return 301 https://localhost$request_uri; 
    }

    location /exception/ {
        proxy_pass http://127.0.0.1:7080;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
    }    
}
person Ben Grimm    schedule 20.01.2015