Python 使用Nginx和Django设置Unix套接字

Python 使用Nginx和Django设置Unix套接字,python,linux,django,sockets,nginx,Python,Linux,Django,Sockets,Nginx,我正在努力按照教程的内容学习。我已经把一切都安排好了。我正在amazon EC2上使用ubuntu 14.4实例: Nginx配置文件以以下内容开头: # the upstream component nginx needs to connect to upstream django { server unix:///path/to/your/mysite/mysite.sock; # for a file socket # server 127.0.0.1:8001; # fo

我正在努力按照教程的内容学习。我已经把一切都安排好了。我正在amazon EC2上使用ubuntu 14.4实例:

Nginx配置文件以以下内容开头:

# the upstream component nginx needs to connect to
upstream django {
    server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    # server 127.0.0.1:8001; # for a web port socket (we'll use this first)
} 
我对设置unix套接字的语法感到困惑。我查看了几个来源,包括,和

如果我理解正确,它们看起来都以“//”开头,路径只指向(在我的例子中)django项目的根目录,路径必须以“.sock”结尾。这看起来对吗

编辑:我已经创建了uwsgi配置文件,但是我尝试使用--socket开关来运行它:

Nginx配置文件现在以以下内容开始:

# the upstream component nginx needs to connect to
upstream django {
 server unix:///tmp/mysite.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket (we'll use this first)
} 
按照我想你说的,我正在socket/tmp/mysite.sock上运行uwsgi

(env1)ubuntu@ip-172-31-28-196:~$ uwsgi --socket /tmp/mysite.sock --wsgi-file test.py --chmod-socket=664
当我打开时:

http://52.10.----:8000/
在firefox中,我看到:

502 Bad Gateway
nginx的错误日志显示:

2015/03/04 15:08:44 [crit] 18398#0: *3 connect() to unix:///home/ubuntu/mysite.sock failed (13: Permission denied) while connecting to upstream, client: 64.56.60.130, server: 52.10.200.38, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///home/ubuntu/mysite.sock:", host: "52.10.200.38:8000"
编辑2:我注释掉了django相关的东西-

 # mysite_uwsgi.ini file
 [uwsgi]    

 # Django-related settings
 # the base directory (full path)
 #chdir           = /path/to/your/project
 # Django's wsgi file
 #module          = project.wsgi
 # the virtualenv (full path)
 #home            = /path/to/virtualenv     

 # process-related settings
 # master
 master          = true
 # maximum number of worker processes
 processes       = 1
 # the socket (use the full path to be safe
 socket          = /tmp/mysite.sock
 # ... with appropriate permissions - may be needed
  chmod-socket    = 664
 # clear environment on exit
 vacuum          = true
我试过:

(env1)ubuntu@ip-172-31-28-196:~$ uwsgi --ini /home/ubuntu/tproxy/tp/mysite_uwsgi.ini --wsgi-file test.py
但又出现了502错误

2015/03/04 17:50:00 [crit] 18842#0: *1 connect() to unix:///tmp/mysite.sock failed (13: Permission denied) while connecting to upstream, client: 64.56.60.130, server: 52.10.200.38, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///tmp/mysite.sock:", host: "52.10.200.38:8000"
编辑3:

(env1)ubuntu@ip-172-31-28-196:~$ uwsgi --ini /home/ubuntu/tproxy/tp/mysite_uwsgi.ini --wsgi-file te
st.py
[uWSGI] getting INI configuration from /home/ubuntu/tproxy/tp/mysite_uwsgi.ini
*** Starting uWSGI 2.0.9 (64bit) on [Wed Mar  4 18:41:43 2015] ***
compiled with version: 4.8.2 on 03 March 2015 02:58:28
os: Linux-3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 2014
nodename: ip-172-31-28-196
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /home/ubuntu
detected binary path: /home/ubuntu/.virtualenvs/env1/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
your processes number limit is 7862
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/mysite.sock fd 3
Python version: 3.4.0 (default, Apr 11 2014, 13:08:40)  [GCC 4.8.2]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x205e710
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 145520 bytes (142 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x205e710 pid: 18868 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 18868)
spawned uWSGI worker 1 (pid: 18869, cores: 1)
编辑4:-刚刚注意到

♥SIGINT/SIGQUIT received...killing workers...
worker 1 buried after 1 seconds
goodbye to uWSGI.
VACUUM: unix socket /tmp/mysite.sock removed.
所以每次我退出uWSGI,插座都会被移除。也许我应该关闭真空选项以便保留chmod设置

我改变了:

vacuum          = false
但是

 (env1)ubuntu@ip-172-31-28-196:/tmp$ sudo chmod 777 mysite.sock
 (env1)ubuntu@ip-172-31-28-196:/tmp$ ls -la
 total 8
 drwxrwxrwt  2 root   root   4096 Mar  4 19:32 .
 drwxr-xr-x 22 root   root   4096 Mar  4 19:06 ..
 srwxrwxrwx  1 ubuntu ubuntu    0 Mar  4 19:32 mysite.sock
 (env1)ubuntu@ip-172-31-28-196:/tmp$ cd /home/ubuntu/
 (env1)ubuntu@ip-172-31-28-196:~$ ls
 host_type.py  requirements.txt  test.py  tproxy
 (env1)ubuntu@ip-172-31-28-196:~$ sudo /etc/init.d/nginx restart
  * Restarting nginx nginx
    ...done.
 (env1)ubuntu@ip-172-31-28-196:~$ uwsgi --ini /home/ubuntu/tproxy/tp/mysite_uwsgi.ini --wsgi-fi
 st.py
 [uWSGI] getting INI configuration from /home/ubuntu/tproxy/tp/mysite_uwsgi.ini
 *** Starting uWSGI 2.0.9 (64bit) on [Wed Mar  4 19:36:42 2015] ***
 .....
 spawned uWSGI worker 1 (pid: 1568, cores: 1)
 ♥SIGINT/SIGQUIT received...killing workers...
 worker 1 buried after 1 seconds
 goodbye to uWSGI.
 (env1)ubuntu@ip-172-31-28-196:~$ cd /tmp
 (env1)ubuntu@ip-172-31-28-196:/tmp$ ls -la
 total 8
 drwxrwxrwt  2 root   root   4096 Mar  4 19:36 .
 drwxr-xr-x 22 root   root   4096 Mar  4 19:06 ..
 srw-rw-r--  1 ubuntu ubuntu    0 Mar  4 19:36 mysite.sock
所以chmod没有被保存

编辑5:

(env1)ubuntu@ip-172-31-28-196:/tmp$ uwsgi --ini /home/ubuntu/tproxy/tp/mysite_uwsgi.ini --wsgi-file
 test.py --chmod-socket=777
[uWSGI] getting INI configuration from /home/ubuntu/tproxy/tp/mysite_uwsgi.ini
*** Starting uWSGI 2.0.9 (64bit) on [Wed Mar  4 20:54:21 2015] ***
compiled with version: 4.8.2 on 03 March 2015 02:58:28
os: Linux-3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 2014
nodename: ip-172-31-28-196
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /tmp
detected binary path: /home/ubuntu/.virtualenvs/env1/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
your processes number limit is 7862
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/mysite.sock fd 3
Python version: 3.4.0 (default, Apr 11 2014, 13:08:40)  [GCC 4.8.2]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x18b4790
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 145520 bytes (142 KB) for 1 cores
*** Operational MODE: single process ***
failed to open python file test.py
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1858)
spawned uWSGI worker 1 (pid: 1859, cores: 1)
--- no python application found, check your startup logs for errors ---
[pid: 1859|app: -1|req: -1/1] 64.56.60.130 () {36 vars in 555 bytes} [Wed Mar  4 20:54:34 2015] GET
/ => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
现在获取内部服务器错误:

2015/03/04 19:33:26 [crit] 1531#0: *1 connect() to unix:///tmp/mysite.sock failed (13: Permission denied) while connecting to upstream, client: 64.56.60.130, server: 52.10.200.38, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///tmp/mysite.sock:", host: "52.10.200.38:8000"

将其更改为“服务器<代码>unix:///tmp/mysite.sock;然后在您创建的uwsgi ini文件中,在
/tmp/

中创建unix套接字感谢您查看这个人,我已经按照您的建议更改了nginx配置。至于uwsgi配置,我想你说的是什么?如果是这样的话,你把这个文件放在哪里,我不认为它在图坦卡蒙的什么地方。我通常只是把它和settings.py和wsgi.py文件放在同一个文件夹中。稍后,当您设置皇帝时,您将看到原因。没问题,昨晚我在AmazonEC2上再次设置了相同的设置以进行尝试,效果非常好。:)仔细检查您的配置,确保您将.sock放在nginx正在查找它的同一位置。启动它时uwsgi会说什么吗?好的,我找到了答案,我从错误的目录运行了uwsgi--ini/home/ubuntu/tproxy/tp/mysite\u uwsgi file test.py--chmod socket=777,但test.py不在那里