如何将 Flask App 作为 apache2 上的 wsgi 部署到现有的 VirtualHost 中?
How to deploy Flask App into existing VirtualHost as wsgi on apache2?
我正在努力将 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 东西集成到现有的 Virtualhost 中吗?
我的虚拟主机文件不像你的那么复杂,但我能够按照 mod_wsgi 文档中的示例使我的 Flask 应用程序正常工作(将 WSGIScriptAlias 集成到我现有的虚拟主机文件中)。
http://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html
特别是 "Mounting the WSGI Application" 部分中的示例虚拟主机配置。
<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>
我正在努力将 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 东西集成到现有的 Virtualhost 中吗?
我的虚拟主机文件不像你的那么复杂,但我能够按照 mod_wsgi 文档中的示例使我的 Flask 应用程序正常工作(将 WSGIScriptAlias 集成到我现有的虚拟主机文件中)。
http://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html
特别是 "Mounting the WSGI Application" 部分中的示例虚拟主机配置。
<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>