使用 Nginx 和 Gunicorn 在同一服务器上的多个夹层项目:"server IP address could not be found"

Multiple Mezzanine projects on same server with Nginx and Gunicorn: "server IP address could not be found"

我对部署还很陌生。我正在尝试在 Ubuntu 16.04 上部署两个 Mezzanine 4.2.3 项目(根据 requirements.txt,它们使用 Django 1.10.8)。我用这个 tutorial 成功部署了第一个。我可以通过它的域名访问它,比如说 example.com。我正在尝试让另一个可以在 food.example.com 或最好是 example.com/food 上访问,但浏览器 returns: "server IP address could not be found".

example.com/etc/nginx/sites-available/example 的 nginx 配置:

server {
    listen 80;
    server_name [SERVER IP ADDRESS] example.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
    root /home/example;
}

    location / {
    include proxy_params;
    proxy_pass http://unix:/home/example/example.sock;
}

food.example.com/etc/nginx/sites-available/food 的 nginx 配置:

server {
    listen 81;
    server_name food.example.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
    root /home/food;
    }

    location / {
    include proxy_params;
    proxy_pass http://unix:/home/food/food.sock;
    }
}

我尝试使用example.com/food,但nginx 一直说其中有可疑符号。我不知道这是否是阻止页面显示的问题之一,但我还是将其更改为子域 food 以尝试隔离问题。

example.com 的 gunicorn 配置文件位于 /etc/systemd/system/gunicorn_example.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/home/example
ExecStart=/home/example/env_example/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/example/example.sock example.wsgi:application

[Install]
WantedBy=multi-user.target

food.example.com 的 gunicorn 配置文件位于 /etc/systemd/system/gunicorn_food.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/home/food
ExecStart=/home/food/env_food/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/food/food.sock food.wsgi:application

[Install]
WantedBy=multi-user.target

Nginx 日志显示没有错误。

systemctl status for nginx, gunicorn_example, 和 gunicorn_food 似乎表明一切正常。 nginx -tnginx.conf 语法和测试没问题。

gunicorn_examplegunicorn_food.service都是运行。

example.sockfood.sock均已成功生成。

ps aux | grep gunicorn 显示工人 运行.

不确定这是否是一个重要的细节,但我不使用 supervisor 或 upstart 进行部署。

我猜我把网址写错了。但是我尝试了各种组合,都没有成功。

example.com的urls.pyin the same folder assettings.py`:

urlpatterns += [
    url("^$", views.blog_post_list_index, name="home"),
]

food.example.comurls.pysettings.py:

在同一文件夹中
urlpatterns += [
    url("^food.example.com$", views.blog_post_list_index, name="home"),
    url("^food.example.com/", include('food_crud.urls')),
    url("^", include("mezzanine.urls")),
]

应用程序在应用程序目录中的urls.py

urlpatterns += [
    url('add/$', food_crud_views.FoodCreateView.as_view(), name='food add'),
    url('list/$', food_crud_views.FoodListView.as_view(), name='food list'),
    url('(?P<pk>\d+)/$', food_crud_views.FoodDetailView.as_view(), name='food detail'),
    url('(?P<pk>\d+)/update$', food_crud_views.FoodUpdateView.as_view(), name='food update'),
    url('(?P<pk>\d+)/delete$', food_crud_views.FoodDeleteView.as_view(), name='food delete'),
]

我错过了什么?

2018 年 2 月 18 日编辑:settings.py 中的 ALLOWED_HOSTS 仅包含 ["example.com/food,"]

在阅读更多内容、在 IRC 上询问并进行更多试验后,事实证明我唯一要做的就是让两个项目都在端口 80 上侦听。

这让我很困惑,因为我读过的大多数文章都说让他们在不同的端口上监听。将不得不在这个方向上进行更多调查。