NginxUwsgiSetup » Cronologia » Versione 1
Simone Piccardi, 19-01-2015 14:34
| 1 | 1 | Simone Piccardi | h1. Configurare nginx e uWSGI per l'uso del protocollo nativo |
|---|---|---|---|
| 2 | |||
| 3 | A partire dalla versione 0.8.40 ngnix supporta direttamente il protocollo _uwsgi_, che consente di utilizzarlo come proxy per uWSGI in maniera ottimizzata. Per poterlo utilizzare in tal modo occorre però modificare opportunamente la sezione @location@. Una configurazione ordinaria, infatti prevede l'uso della direttiva @proxy_pass@, che dovrà essere sostituita da @uwsgi_pass@, un esempio delle modifiche da effettuare è il seguente: |
||
| 4 | |||
| 5 | <pre> |
||
| 6 | upstream mio-servizio { |
||
| 7 | server 127.0.0.1:8000; |
||
| 8 | } |
||
| 9 | server { |
||
| 10 | listen IL.MIO.IP.PUB:443 ssl; |
||
| 11 | server_name miosito.it; |
||
| 12 | [...] |
||
| 13 | location / { |
||
| 14 | # removed |
||
| 15 | # proxy_pass http://mio-servizio; |
||
| 16 | # proxy_http_version 1.1; |
||
| 17 | # proxy_pass_header Server; |
||
| 18 | # added |
||
| 19 | uwsgi_pass mio-servizio; |
||
| 20 | include uwsgi_params; |
||
| 21 | # unchanged |
||
| 22 | proxy_redirect off; |
||
| 23 | proxy_set_header Host $http_host; |
||
| 24 | proxy_set_header X-Real-IP $remote_addr; |
||
| 25 | proxy_set_header X-Scheme $scheme; |
||
| 26 | proxy_set_header X-Forwarded-Proto $thescheme; |
||
| 27 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
||
| 28 | } |
||
| 29 | </pre> |
||
| 30 | |||
| 31 | Ovviamente occorrerà anche lanciare il comando @uwsgi@ per indicargli di utilizzare nativamente il protocollo _uwsgi_, per questo invece di usare la direttiva @--http@ occorrerà utilizzare la direttiva @--socket@, in particolare una configurazione usata in maniera ordinaria con @uwsgi_pass@ come: |
||
| 32 | |||
| 33 | <pre> |
||
| 34 | /usr/local/bin/uwsgi --http 127.0.0.1:8000 --stats 127.0.0.1:8001 \ |
||
| 35 | --http-websockets --gevent 100 --module mymodule.uwsgi |
||
| 36 | </pre> |
||
| 37 | |||
| 38 | dovrà essere modificata in: |
||
| 39 | |||
| 40 | <pre> |
||
| 41 | /usr/local/bin/uwsgi --socket 127.0.0.1:8000 --stats 127.0.0.1:8001 \ |
||
| 42 | --http-websockets --gevent 100 --module mymodule.uwsgi |
||
| 43 | </pre> |
||
| 44 | |||
| 45 | Come ulteriore ottimizzazione, se come negli esempi precedenti si sta facendo riferimento ad un servizio che gira sulla stessa macchina, è preferibile anche evitare l'ulteriore overhead di utilizzare socket TCP, ed usare direttamente un socket locale. In questo caso è necessario modificar opportunamente (rispetto all'esempio precedente) la direttiva @server@ nella sezione @upstream@ di ngnix per fargli utilizzare il socket, con qualcosa del tipo: |
||
| 46 | |||
| 47 | <pre> |
||
| 48 | upstream mio-servizio { |
||
| 49 | server unix:///tmp/my-application.sock; |
||
| 50 | } |
||
| 51 | </pre> |
||
| 52 | |||
| 53 | mentre dall'altro lato si dovrà modificare la modalità con cui si avvia @uwsgi@ lanciandolo come: |
||
| 54 | |||
| 55 | <pre> |
||
| 56 | /usr/local/bin/uwsgi --socket /tmp/my-application.sock --stats 127.0.0.1:8001 \ |
||
| 57 | --chmod-socket=640 --chown-socket=www-data \ |
||
| 58 | --http-websockets --gevent 100 --module mymodule.uwsgi |
||
| 59 | </pre> |
||
| 60 | |||
| 61 | in modo da creare il socket con i giusti permessi ed un proprietario che ne consenta l'accesso da nginx. |