Передача прокси-сервера Nginx на локальный хост Gunicorn неожиданно возвращает 50-кратную ошибку

У меня очень простая настройка с nginx, установленным с приложением django, работающим на сервере gunicorn. Конфигурация gunicorn проста и ниже:

exec gunicorn myapp.wsgi:application \
    --workers 5
    --reload

Я настроил сервер nginx для proxy_pass всего входящего трафика на сервере по умолчанию на 127.0.0.1:8000. Однако, когда я перехожу к IP-адресу сервера, я вижу экран nginx 404 по умолчанию. Итак, я предполагаю, что трафик был передан прокси-сервером nginx, но каким-то образом не был правильно маршрутизирован, и не было получено никакого ответа, что вынуждает nginx возвращать 404. Что именно я делаю не так с конфигурацией gunicorn или nginx? Для справки ниже также представлен мой полный файл nginx.conf:

user nginx; worker_processes auto; 

error_log /var/log/nginx/error.log; 
pid /run/nginx.pid;

    # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf;

    events {
        worker_connections 1024; }

    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;

        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
        include /etc/nginx/sites-available/*

    upstream app_server {
        server 127.0.0.1:8000 fail_timeout=0;
}

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://127.0.0.1:8000;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

    }

РЕДАКТИРОВАТЬ: После более внимательного изучения сообщения об ошибке в этой настройке я понимаю, что это не 404, а на самом деле 50x, поэтому что-то определенно должно быть не так. 2 службы взаимодействуют друг с другом. Один только переход к конечной точке Gunicorn создает приложение django без проблем. Как и переход к экрану splace nginx по умолчанию перед добавлением параметра proxy_pass. Любая помощь, что именно мне не хватает. Спасибо

1
задан 29 June 2017 в 09:51
1 ответ

Решил мою проблему. В основном для решений на основе Fedora, работающих под управлением nginx, вы должны открыть доступ к восходящим соединениям для всех пользователей, которые не являются root. Вы можете сделать это с помощью этой команды

setsebool -P httpd_can_network_connect 1

. Очевидно, что запускается как root. Дополнительную информацию можно найти по этому другому вопросу: https://stackoverflow.com/questions/23948527/13-permission-denied- while-connecting-to-upstreamnginx

1
ответ дан 3 December 2019 в 23:29

Теги

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