【问题标题】:Name duplicates previous WSGI daemon definition名称与之前的 WSGI 守护程序定义重复
【发布时间】:2017-01-12 00:48:48
【问题描述】:

我正在更改网站的域名。有一段时间我希望旧域名和新域名指向站点。我正在运行一个 Python Django 站点。

我原来的 Apache2 conf 工作正常,基础是:

<VirtualHost *:80>
        ServerAdmin name@gmail.com
        ServerName originalsite.co.uk
        ServerAlias www.originalsite.co.uk
        DocumentRoot /var/www/originalsite
        WSGIDaemonProcess originalsite python-path=/var/www/originalsite:/var/www/originalsite/env/lib/python2.7/site-packages
        WSGIProcessGroup originalsite
        WSGIScriptAlias / /var/www/originalsite/originalsite/wsgi.py
        ...
</VirtualHost>

我设置了一个新的 conf 文件,仅进行了以下更改:

    ServerName newsite.co.uk
    ServerAlias www.newsite.co.uk

我收到以下错误:

名称与之前的 WSGI 守护程序定义重复。

我该如何解决这个问题?感谢您的帮助

【问题讨论】:

  • 换个originalsite名字怎么样?不在目录地址中,只是名称如 WSGIDaemonProcess somethingelse python-path=/var/www/originalsite:/var/www/originalsite/env/lib/python2.7/site-packagesWSGIProcessGroup somethingelse
  • 这么简单!谢谢
  • 嗨,是否可以删除特定的 WSGI 进程和组?因为我需要重复使用相同的名称。

标签: python django apache mod-wsgi


【解决方案1】:

更改originalsite名称

不在目录地址中,只是名称中

WSGIDaemonProcess somethingelse python-path=/var/www/originalsite:/var/www/originalsite/env/‌​lib/python2.7/site-p‌​ackages

WSGIProcessGroup somethingelse

【讨论】:

  • @jinchuika 我从来没有在 https 上使用过它,所以没有,但你可以随时检查 apache 错误日志,看看它为什么不起作用.. 打开 2 个 ssh 客户端在 1 中执行类似 tail -f /usr/local/apache/logs/error_log 这样的操作它实时显示 apache 错误日志,在另一个尝试启动 apache 时,您会看到导致错误的原因
  • 你能@max 请检查我关于这个主题的详细问题吗? stackoverflow.com/questions/43983577/…
【解决方案2】:

错误的原因是 mod_wsgi 守护进程组的名称在整个 Apache 安装中必须是唯一的。不能在不同的VirtualHost 定义中使用相同的守护进程组名称。这对于在确定特定情况下引用的守护进程组时避免冲突是必要的。

【讨论】:

  • // , 我们怎样才能让它们与众不同?如果它们不同,它通常会对应用程序行为产生什么影响?
  • 您可以通过为它们使用不同的名称来使它们不同。没有影响,因为如果它们是不同的 WSGI 应用程序,最佳实践是在单独的守护进程组中运行它们。如果问题是您尝试为 HTTP 与 HTTPS 虚拟主机创建单独的守护进程组,请不要这样做。从第二个删除WSGIDaemonProcess,并在第一个VirtualHost 的进程组上使用WSGIProcessGroup 名称。这是 HTTP/HTTPS VirtualHost 对的特殊情况。
【解决方案3】:

我对 Apache2 配置有同样的问题。 就我而言,我在 /etc/apache2/sites-enabled 中复制了 000-default.conf 文件。

首先我在 Linux 中查看 'WSGIDaemon' 字符串:

grep -iRl "WSGIDaemon" ./

第二次分析每一行。我在/etc/apache2/sites-enabled/000-default-copy.conf 上发现了重复文件。删除后,检查语法:

sudo apachectl configtest

返回“语法正常”。我花了这 4 个小时...我希望有人使用这个 :)

【讨论】:

    【解决方案4】:

    如果您在使用certbot 命令安装多个“让我们加密证书”时遇到此问题,则可能是由于certbot 中的一些错误,如here 所述。如需快速解决方法,您可以发表评论

    WSGIScriptAlias 
    WSGIDaemonProcess 
    WSGIProcessGroup
    

    运行certbot 命令,然后删除 cmets。

    【讨论】:

    • 然后你会得到一个以“-le-ssl.conf”结尾的新配置文件,它需要 WSGIDaemonProcess 和 WSGIProcessGroup 的唯一名称。
    【解决方案5】:

    我已经通过在/etc/apache2/sites-enabled/000-default.conf 中注释以下 3 行来解决这个问题

    # WSGIDaemonProcess 
    # WSGIProcessGroup 
    # WSGIScriptAlias
    

    然后重新加载/重新启动 Apache2。

    我将它们保留在 /etc/apache2/sites-enabled/default-ssl.conf 中,因为它在 HTTP(非 SSL)和 HTTPS(SSL)中重复

    【讨论】:

    • 对于 certbot,我在非 ssl conf 中有 WSGIDaemonProcess atemoncom。当 certbot 复制相同时,ssl 上的新服务器具有相同的 WSGIDaemonProcess atemoncom 并抛出错误。为了解决这个问题,我在上面注释了这一行,然后添加了 certbot,然后在 ssl 和非 ssl conf 中取消注释它。然后我将其更改为 WSGIDaemonProcess atemoncom 用于非 ssl conf 和 WSGIDaemonProcess sslatemoncom 用于 ssl conf。现在 ssl 和 non-ssl 都有不同的名称,因此没有错误
    【解决方案6】:

    虽然给出了正确的答案,但我在阅读答案时仍然感到困惑。因此,这里对在 Apache 上为单个站点启用 HTTP 和 HTTPS 时的特定情况进行一些说明。

    在您的一个配置文件中(比如说 HTTP):

    # Add this outside of VirtualHost scope to ensure it's global
    WSGIDaemonProcess some_name python-path=/var/www/originalsite:/var/www/originalsite/env/‌​lib/python2.7/site-p‌​ackages
    
    ...
    
    
    # Within VirtualHost
    WSGIProcessGroup some_name
    

    在其他配置文件(HTTPS)中:

    WSGIProcessGroup some_name
    

    就是这样。它的作用是在两个配置文件中链接同一个组。进程名称仅在一个配置文件中定义,这让 Apache 很高兴。

    【讨论】:

    • 我也遇到了同样的问题,但按照您的步骤操作后,我能够成功设置 ssl 证书。谢谢
    猜你喜欢
    • 2018-05-27
    • 2013-01-19
    • 2020-09-14
    • 2016-10-14
    • 2012-01-23
    • 2013-04-16
    • 2017-01-13
    • 2021-02-03
    • 2012-08-13
    相关资源
    最近更新 更多