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