Превышено время ожидания Web2py для uwsgi и nginx upstream (110: Тайм-аут соединения) при чтении upstream - PullRequest
0 голосов
/ 16 октября 2018

Я развернул свое приложение на NGINX.И мой error.log полон:

upstream timed out (110: Connection timed out) while reading upstream, client: 10.107.46.176, server: myApp, request: "GET /myApp/Home/index.load HTTP/1.1", upstream: "uwsgi://unix:///tmp/web2py.socket:", host: "myApp.eng.home.com", referrer: "http://myApp.eng.home.com/"

У меня развернута БД Postgres.А вот так выглядит страница index.html:

<div class="clicks">{{=LOAD(c='Home',f='index',extension='load',ajax=True,timeout=30000,times=3)}}
                                {{pass}}
                            </div>

Это страница index.load:

{{=numHits}}

Это мой контроллер Home.py:

def index():
    numHits = db(db.opStatus.id > 0).count()
    return dict(numHits=numHits)

Это отлично работает с ракетным сервером, но только в NGINX он не работает.

/etc/init$ cat uwsgi-emperor.conf
# Emperor uWSGI script

description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [06]
##
#remove the comments in the next section to enable static file compression for the welcome app
#in that case, turn on gzip_static on; on /etc/nginx/nginx.conf
##
#pre-start script
#    python /home/www-data/web2py/web2py.py -S welcome -R scripts/zip_static_files.py
#    chown -R www-data:www-data /home/www-data/web2py/*
#end script
respawn
exec uwsgi --master --die-on-term --emperor /etc/uwsgi --logto /var/log/uwsgi/uwsgi.log

emperor.uwsgi.service

cat /etc/systemd/system/emperor.uwsgi.service
[Unit]
Description = uWSGI Emperor
After = syslog.target

[Service]
ExecStart = /usr/local/bin/uwsgi --ini /etc/uwsgi/web2py.ini
RuntimeDirectory = uwsgi
Restart = always
KillSignal = SIGQUIT
Type = notify
StandardError = syslog
NotifyAccess = all

[Install]
WantedBy = multi-user.target

Я запускаю службу с помощью: sudo service emperor.uwsgi start

1 Ответ

0 голосов
/ 19 октября 2018

Поскольку моя репутация не позволяет комментировать ваш вопрос, мне приходится немного злоупотреблять разделом ответов, надеясь, что у меня не возникнет никаких проблем:

Поскольку я развертываю свое приложение web2py с помощью NGINX, все проблемы основаны наплохая конфигурация uWSGI.Поэтому мой первый совет - проверить вашу установку и настройку uWSGI .Особенно проверяйте emperor.uwsgi.service, uwsgi / web2py.ini и uwsgi-emperor.conf.

Кроме того, возможно, что у вас есть другой каталог установки web2py, который по умолчанию считается "/ home / www-data / web2py. В этом случае вам нужно настроить nginx / sites-available / web2py.

Наконец, проверьте пользователя, который установил web2py. Этот пользователь должен быть правильно настроен в nginx / nginx.conf

Надеюсь, что эти советы помогут вам решить вашу проблему. Если нет, опубликуйте ваши файлы конфигурации, как указано выше.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Спасибо запредоставив ваши файлы конфигурации. Я сравнил их с моей конфигурацией, и она выглядит хорошо.

Но я немного запутался, что вы запускаете emperor вручную. В моей конфигурации это выполняется сервером nginx, как настроено в/ etc / nginx / sites-available / web2py следующим образом:

# file /etc/nginx/sites-available/web2py
server {
    listen          80;
    server_name     $hostname;
    ###to enable correct use of response.static_version
    location ~* ^/(\w+)/static(?:/_[\d]+\.[\d]+\.[\d]+)?/(.*)$ {
        alias /home/www-data/web2py/applications/$1/static/$2;
        expires max;
        ### if you want to use pre-gzipped static files (recommended)
        ### check scripts/zip_static_files.py and remove the comments
        # include /etc/nginx/conf.d/web2py/gzip_static.conf;
    }
    ###
    ###if you use something like myapp = dict(languages=['en', 'it', 'jp'], default_language='en') in your routes.py
    #location ~* ^/(\w+)/(en|it|jp)/static/(.*)$ {
    #    alias /home/www-data/web2py/applications/$1/;
    #    try_files static/$2/$3 static/$3 =404;
    #}
    ###

    location / {
        #uwsgi_pass      127.0.0.1:9001;
        uwsgi_pass      unix:///tmp/web2py.socket;
        include         uwsgi_params;
        uwsgi_param     UWSGI_SCHEME $scheme;
        uwsgi_param     SERVER_SOFTWARE    nginx/$nginx_version;
        ###remove the comments to turn on if you want gzip compression of your pages
        # include /etc/nginx/conf.d/web2py/gzip.conf;
        ### end gzip section
        ### remove the comments if you use uploads (max 10 MB)
        #client_max_body_size 10m;
        ###
    }
}
server {
    listen 443 default_server ssl;
    server_name     $hostname;
    ssl_certificate         /etc/nginx/ssl/web2py.crt;
    ssl_certificate_key     /etc/nginx/ssl/web2py.key;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_ciphers ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    keepalive_timeout    70;
    location / {
        #uwsgi_pass      127.0.0.1:9001;
        uwsgi_pass      unix:///tmp/web2py.socket;
        include         uwsgi_params;
        uwsgi_param     UWSGI_SCHEME $scheme;
        uwsgi_param     SERVER_SOFTWARE    nginx/$nginx_version;
        ###remove the comments to turn on if you want gzip compression of your pages
        # include /etc/nginx/conf.d/web2py/gzip.conf;
        ### end gzip section
        ### remove the comments if you want to enable uploads (max 10 MB)
        #client_max_body_size 10m;
        ###
    }
    ###to enable correct use of response.static_version
    location ~* ^/(\w+)/static(?:/_[\d]+\.[\d]+\.[\d]+)?/(.*)$ {
        alias /home/www-data/web2py/applications/$1/static/$2;
        expires max;
        ### if you want to use pre-gzipped static files (recommended)
        ### check scripts/zip_static_files.py and remove the comments
        # include /etc/nginx/conf.d/web2py/gzip_static.conf;
    }
    ###
}

Обратите особое внимание на обе строки

uwsgi_pass      unix:///tmp/web2py.socket;

Я пометил .разъем как особенное, но не могу вспомнить почему.Может быть, я пропустил его в сценарии установки, не уверен.

Решает ли это вашу проблему?

С уважением, Клеменс

...