Nginx прокси PHP -FPM + Lighttpd 405 не разрешено symfony - PullRequest
0 голосов
/ 11 февраля 2020

Здравствуйте. Я пытаюсь обслуживать веб-приложение php, используя Nginx PHP-FPM, используя tcp socket на удаленном хосте и lighttd для обслуживания содержимого c на удаленном сервере.

Мне удалось связать эти три блока, но у меня есть проблема для управления взаимодействиями.

Здесь моя Nginx конфигурация прокси

upstream xxxx-staging {
    server xxxxx.com:81 fail_timeout=0;
}

server {
    listen       80;
    server_name  xxxxxxx.com;
    return       301 https://xxxxx.com$request_uri;
}

server {
    listen 443 ssl;
    server_name  xxxxxx.com;
    root         /xxxxxx/public;


    ssl_certificate /etc/nginx/ssl/xxx.com.pem;
    ssl_certificate_key /etc/nginx/ssl/xxx.com.key;

    access_log /var/log/nginx/xxx.access.log;
    error_log /var/log/nginx/xxx.error.log error;

    client_max_body_size 256m;
        proxy_intercept_errors on; 
        error_page 404 = /index.php;
        error_page 405 = 200$uri;   


    location = / {index index.php;} 

    location / {
    proxy_pass http://xxxxx-staging;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        auth_basic           "Please authenticate";
        auth_basic_user_file /etc/nginx/passwords/xxxxxxx.com.passwdfile;

    }

    location ~ ^/index\.php$(/|$) {
        fastcgi_pass xxxxx.com:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
    }
}

Когда я удаляю error_page 405 = 200$uri; symfony возвращает мне method post not allowed, а когда я ее ставлю nginx возвращает мне 405.

Я явно не понимаю, как устанавливается связь, но не знаю, где я неправ.

1 Ответ

0 голосов
/ 11 февраля 2020

Вы используете auth_basic и auth_basic_user_file в блоке location /. Правильно ли я понимаю, что вы не получаете запрос на ввод пароля при переходе в сторону и вместо этого получаете ошибку 405?

Я понимаю, что ошибка означает, что аутентификация ожидается, но не бывает. Я бы предложил переместить auth_basic и auth_basic_user_file на один уровень выше в блоке сервера. Таким образом, все покрыто, а не только один блок местоположения, и вы должны получить запрос пароля.

upstream xxxx-staging {
    server xxxxx.com:81 fail_timeout=0;
}

server {
    listen       80;
    server_name  xxxxxxx.com;
    return       301 https://xxxxx.com$request_uri;
}

server {
    listen 443 ssl;
    server_name  xxxxxx.com;
    root         /xxxxxx/public;

    auth_basic           "Please authenticate";
    auth_basic_user_file /etc/nginx/passwords/xxxxxxx.com.passwdfile;

    ssl_certificate /etc/nginx/ssl/xxx.com.pem;
    ssl_certificate_key /etc/nginx/ssl/xxx.com.key;

    access_log /var/log/nginx/xxx.access.log;
    error_log /var/log/nginx/xxx.error.log error;

    client_max_body_size 256m;
        proxy_intercept_errors on; 
        error_page 404 = /index.php;
        error_page 405 = 200$uri;   


    location = / {index index.php;} 

    location / {
        proxy_pass http://xxxxx-staging;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ ^/index\.php$(/|$) {
        fastcgi_pass xxxxx.com:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
    }
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...