这是我的第一个Web应用程序部署,并遇到各种问题。
我目前正在为Django应用程序的nginx + gunicorn实现,但大多数这个问题涉及到nginxconfiguration。 在某些情况下,nginx会收到连接并代理到gunicorn本地服务器。
在Nginx的configuration,它说server_name我必须提供一个? 我不打算使用任何types的域名,只是通过我的networking的外部IP(这是静态的)和端口号来听。
我的愿望是,当我访问像http://xxx.xxx.xxx.xxx:9050东西,我将能够得到的网站。
以下是我将基于configuration参考的示例代码。
server { listen 80; server_name WHAT TO PUT HERE?; root /path/to/test/hello; location /media/ { # if asset versioning is used if ($query_string) { expires max; } } location /admin/media/ { # this changes depending on your python version root /path/to/test/lib/python2.6/site-packages/django/contrib; } location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_connect_timeout 10; proxy_read_timeout 10; proxy_pass http://localhost:8000/; } # what to serve if upstream is not available or crashes error_page 500 502 503 504 /media/50x.html; }
server_name默认为空string,这很好; 你可以完全排除它。
“我不想在这个名字上”的另一个常见方法是使用server_name _;
不过,你的http://xxx.xxx.xxx.xxx:9050 URL不能用于这个configuration。 您只能在端口80上进行监听。您需要添加listen 9050; 以及。
服务器名称 _; 是不是通配符看到这里:
http://blog.gahooa.com/2013/08/21/nginx-how-to-specify-a-default-server
只需为ip-only访问指定default_server指令(请参阅http://nginx.org/en/docs/http/request_processing.html )
server { listen 1.2.3.4:80 default_server; ... }
如果您希望您的应用程序在没有特定主机名的情况下在端口9050上进行响应,那么您可以跳过server_name,因为Nginx首先parsing了监听条目,然后server_name(如果存在):
server { listen 9050; ..... }
更多细节在这里: Nginx的server_name和它是如何工作的