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. |