【问题标题】:How to deploy Flask App into existing VirtualHost as wsgi on apache2?如何将 Flask App 作为 apache2 上的 wsgi 部署到现有的 VirtualHost 中?
【发布时间】:2018-02-06 11:56:35
【问题描述】:

我正在努力将 Flask 应用程序部署到现有的 VirtualHost 配置中。我想将所有 Web 应用程序保留在同一端口上的同一域下。遵循大多数教程时,它可以正常工作:

<IfModule mod_ssl.c>

<VirtualHost *:81>
<IfModule mod_headers.c>

    Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

</IfModule> 
SSLProxyEngine On

    ServerName localhost
    WSGIScriptAlias /flasktest /var/www/SetImageText/SetImageText.wsgi
    <Directory /var/www/SetImageText/SetImageText/>
        Order allow,deny
        Allow from all
    </Directory>
    Alias /static /var/www/SetImageText/SetImageText/static
    <Directory /var/www/SetImageText/SetImageText/static/>
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on
SSLCertificateFile    /etc/letsencrypt/live/own_domain/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/own_domain/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/own_domain/fullchain.pem

但是当我尝试将其集成到现有配置中时:

<IfModule mod_ssl.c>

<VirtualHost own_domain:443>
<IfModule mod_headers.c>

    Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

</IfModule> 
SSLProxyEngine On

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

<FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>


BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown


DocumentRoot /var/www
<Directory /var/www>
    Order allow,deny
    deny from all
</Directory>

WSGIScriptAlias /flasktest /var/www/SetImageText/SetImageText.wsgi
    <Directory /var/www/SetImageText/SetImageText/>
        Order allow,deny
        Allow from all
    </Directory>
    Alias /static /var/www/SetImageText/SetImageText/static
    <Directory /var/www/SetImageText/SetImageText/static/>
        Order allow,deny
        Allow from all
    </Directory>


<Directory /var/www/owncloud>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride None
            Order allow,deny
            allow from all
    Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
    </Directory>

SSLEngine on
SSLCertificateFile    /etc/letsencrypt/live/own_domain/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/own_domain/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/own_domain/fullchain.pem

它只会回答 404。有人知道将这个 wsgi 东西集成到现有虚拟主机中的可能性吗?

【问题讨论】:

    标签: python flask apache2 mod-wsgi


    【解决方案1】:

    我的虚拟主机文件没有你的那么复杂,但我能够按照 mod_wsgi 文档中的示例让我的 Flask 应用程序正常工作(将 WSGIScriptAlias 集成到我现有的虚拟主机文件中)。

    http://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html

    特别是“挂载 WSGI 应用程序”部分中的示例虚拟主机配置。

    <VirtualHost *:80>
    
        ServerName www.example.com
        ServerAlias example.com
        ServerAdmin webmaster@example.com
    
        DocumentRoot /usr/local/www/documents
    
        <Directory /usr/local/www/documents>
        Order allow,deny
        Allow from all
        </Directory>
    
        WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.wsgi
    
        <Directory /usr/local/www/wsgi-scripts>
        Order allow,deny
        Allow from all
        </Directory>
    </VirtualHost>
    

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 我自己找到了解决方案。 @HanibalG 没有给出明确的解决方案,但他的配置示例包含它。我不得不用通配符 &lt;VirtualHost *:443&gt; 替换我的 &lt;VirtualHost own_domain:443&gt;
    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2012-08-07
    • 2011-04-11
    • 1970-01-01
    • 2020-05-24
    • 2017-04-01
    相关资源
    最近更新 更多