什么是gunicorn.sock?

我是一个新手,遵循Michal Karzynski的gunicorndjango教程。 我在Ubuntu 14上使用Django 1.7.4,我的gunicorn脚本的设置如下

#!/bin/bash NAME="mytestapp" # Name of the application DJANGODIR=/var/www/testapp/src # Django project directory SOCKFILE=/var/www/testapp/run/gunicorn.sock # we will communicte using this unix socket USER=ubuntu # the user to run as GROUP=ubuntu # the group to run as NUM_WORKERS=3 # how many worker processes should Gunicorn spawn DJANGO_SETTINGS_MODULE=testapp.settings # which settings file should Django use DJANGO_WSGI_MODULE=testapp.wsgi # WSGI module name echo "Starting $NAME as `whoami`" # Activate the virtual environment cd $DJANGODIR export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE export PYTHONPATH=$DJANGODIR:$PYTHONPATH # Create the run directory if it doesn't exist RUNDIR=$(dirname $SOCKFILE) test -d $RUNDIR || mkdir -p $RUNDIR # Start your Django Unicorn # Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon) exec gunicorn ${DJANGO_WSGI_MODULE}:application \ --name $NAME \ --workers $NUM_WORKERS \ --user=$USER --group=$GROUP \ --bind=0.0.0.0:8000 \ --log-level=debug \ --log-file=- 

当我更改绑定设置为unix:$ SOCKFILE,我的脚本仍然运行,但我无法连接到我的浏览器。 在这个问题中,我读过在生产服务器上部署0.0.0.0:8000不明智的做法。

我知道一些unix套接字,但我不知道如何使用unix套接字文件来服务我的网站。 我试图编辑套接字文件作为超级用户,但操作系统不让我打开它。

我怎样才能设置套接字文件,让我服务我的网页?

PS:这是我的nginxconfiguration文件

 upstream hello_app_server { # fail_timeout=0 means we always retry an upstream even if it failed # to return a good HTTP response (in case the Unicorn master nukes a # single worker for timing out). server 127.0.0.1:8000 fail_timeout=0; } server { listen 80; server_name test.com; client_max_body_size 4G; access_log /var/www/testapp/src/logs/nginx-access.log; error_log /var/www/testapp/src/logs/nginx-error.log; location /static/ { alias /var/www/testapp/src/static/static_dirs/; } location /media/ { alias /var/www/testapp/src/static/media/; } location / { # an HTTP header important enough to have its own Wikipedia entry: # http://en.wikipedia.org/wiki/X-Forwarded-For proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # enable this if and only if you use HTTPS, this helps Rack # set the proper protocol for doing redirects: # proxy_set_header X-Forwarded-Proto https; # pass the Host: header from the client right along so redirects # can be set properly within the Rack application proxy_set_header Host $http_host; # we don't want nginx trying to do something clever with # redirects, we set the Host: header above already. proxy_redirect off; # set "proxy_buffering off" *only* for Rainbows! when doing # Comet/long-poll stuff. It's also safe to set if you're # using only serving fast clients with Unicorn + nginx. # Otherwise you _want_ nginx to buffer responses to slow # clients, really. # proxy_buffering off; # Try to serve static files from nginx, no point in making an # *application* server like Unicorn/Rainbows! serve static files. if (!-f $request_filename) { proxy_pass http://hello_app_server; break; } } # Error pages error_page 500 502 503 504 /500.html; location = /500.html { root /var/www/testapp/src/static/; } } 

你应该使用像nginx这样的反向代理来坐在gunicorn前,这就是实际为你的网站提供服务。 他们通过插座进行通信。

gunicorn文档有一个nginx配置的样例 ,但是显然你应该使这个sockfile匹配你在gunicorn配置文件中的配置。

如果您在本地服务器上工作,套接字是网络端口更快,更高效的替代方案。 但是,如果你的nginx服务器和你的django应用程序在不同的服务器上,那么你需要打开特定的ip连接。

对于你的例子,如果你想使用套接字,你只需要将上游服务器地址指向你的套接字文件。 将nginx配置更改为

 upstream hello_app_server { # fail_timeout=0 means we always retry an upstream even if it failed # to return a good HTTP response (in case the Unicorn master nukes a # single worker for timing out). server unix:/var/www/testapp/run/gunicorn.sock fail_timeout=0; } server { . . . # Rest of your file...