NginxUwsgiSetup » Cronologia » Versione 2
Simone Piccardi, 19-01-2015 14:37
| 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 | 2 | Simone Piccardi | Si abbia cura di verificare che il file @uwsgi_params@, fornito con l'installazione di uWSGI, sia correttamente installato in @/etc/nginx/@. |
| 32 | 1 | Simone Piccardi | |
| 33 | 2 | Simone Piccardi | 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 per la comunicazione in maniera ordinaria con @proxy_pass@ come la seguente: |
| 34 | |||
| 35 | 1 | Simone Piccardi | <pre> |
| 36 | /usr/local/bin/uwsgi --http 127.0.0.1:8000 --stats 127.0.0.1:8001 \ |
||
| 37 | --http-websockets --gevent 100 --module mymodule.uwsgi |
||
| 38 | </pre> |
||
| 39 | |||
| 40 | dovrà essere modificata in: |
||
| 41 | |||
| 42 | <pre> |
||
| 43 | /usr/local/bin/uwsgi --socket 127.0.0.1:8000 --stats 127.0.0.1:8001 \ |
||
| 44 | --http-websockets --gevent 100 --module mymodule.uwsgi |
||
| 45 | </pre> |
||
| 46 | |||
| 47 | 2 | Simone Piccardi | 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 modificare opportunamente (rispetto all'esempio precedente) la direttiva @server@ nella sezione @upstream@ di ngnix per fargli utilizzare il socket, con qualcosa del tipo: |
| 48 | 1 | Simone Piccardi | |
| 49 | <pre> |
||
| 50 | upstream mio-servizio { |
||
| 51 | server unix:///tmp/my-application.sock; |
||
| 52 | } |
||
| 53 | </pre> |
||
| 54 | |||
| 55 | 2 | Simone Piccardi | mentre dall'altro lato si dovrà modificare la modalità con cui si avvia @uwsgi@ per fargli usare un socket locale lanciandolo come: |
| 56 | 1 | Simone Piccardi | |
| 57 | <pre> |
||
| 58 | /usr/local/bin/uwsgi --socket /tmp/my-application.sock --stats 127.0.0.1:8001 \ |
||
| 59 | --chmod-socket=640 --chown-socket=www-data \ |
||
| 60 | --http-websockets --gevent 100 --module mymodule.uwsgi |
||
| 61 | </pre> |
||
| 62 | |||
| 63 | in modo da creare il socket con i giusti permessi ed un proprietario che ne consenta l'accesso da nginx. |