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

24

我正在更改网站的域名。在一段时间内,我希望旧域名和新域名都指向该网站。我正在运行Python Django网站。

我的原始Apache2配置工作正常,基础是:

<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>

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

    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 这样的名称。 - max
如此简单!谢谢 - HenryM
你好,是否可以删除特定的WSGI进程和组?因为我需要复用相同的名称。 - Mheni
6个回答

24

更改originalsite的名称

不是在目录地址中,只是更改名称,例如:

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

WSGIProcessGroup somethingelse

1
@jinchuika,我从未在https上使用过它,因此不确定。但是您可以随时检查Apache错误日志以查看为什么无法正常工作。打开1个SSH客户端中的2个,类似于tail -f /usr/local/apache/logs/error_log这样做,以便实时显示Apache错误日志,并在另一个终端尝试启动Apache,您将看到导致错误的原因。 - max
@max,请您帮忙查看一下我关于这个主题的详细问题,链接为http://stackoverflow.com/questions/43983577/wsgi-error-with-two-ssl-virtual-hosts-and-apache。谢谢! - jinchuika

22
如果您在使用certbot命令安装多个“Let's Encrypt证书”时遇到此问题,则可能是由于certbot中的某些bug,正如这里讨论的那样。为了快速解决问题,您可以注释掉相应代码。
WSGIScriptAlias 
WSGIDaemonProcess 
WSGIProcessGroup

运行certbot命令,然后删除注释。


3
然后您将获得一个新的配置文件,以“-le-ssl.conf”结尾,需要为WSGIDaemonProcess和WSGIProcessGroup指定唯一名称。 - embe

7
错误的原因是因为mod_wsgi守护进程组的名称必须在整个Apache安装中唯一。不可能在不同的VirtualHost定义中使用相同的守护进程组名称。这是必要的,以避免在某些情况下确定引用的守护进程组时发生冲突。

//我们该如何使它们不同?如果它们不同,通常会对应用程序行为产生什么影响? - Nathan Basanese
3
通过使用不同的名称来区分它们。如果它们是不同的WSGI应用程序,则最佳实践是在单独的守护进程组中运行它们,对性能影响不大。如果问题是您正在尝试为HTTP和HTTPS虚拟主机创建单独的守护进程组,请不要这样做。从第二个虚拟主机中删除“WSGIDaemonProcess”,并让“WSGIProcessGroup”使用第一个“VirtualHost”的进程组名称。这是HTTP / HTTPS“VirtualHost”对的特殊情况。 - Graham Dumpleton

4
我通过将以下三行代码在/etc/apache2/sites-enabled/000-default.conf中注释掉,解决了这个问题。
# WSGIDaemonProcess 
# WSGIProcessGroup 
# WSGIScriptAlias

然后重新加载/重启Apache2。

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


1
对于Certbot,我在非SSL配置中有WSGIDaemonProcess atemoncom。当Certbot复制相同的内容时,在SSL上的新服务器上也有相同的WSGIDaemonProcess atemoncom并抛出错误。为了解决这个问题,我注释了上面的行,然后添加了Certbot,然后在SSL和非SSL配置中取消注释。然后我将其更改为非SSL配置的WSGIDaemonProcess atemoncom和SSL配置的WSGIDaemonProcess sslatemoncom。现在SSL和非SSL都有不同的名称,因此没有错误。 - Varghese Chacko

1

我在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个小时在这上面……希望有人会用到它 :)


1

虽然有正确的答案,但我在阅读答案时仍感到困惑。因此,针对在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证书。谢谢! - Abayomi Olowu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接