我在服务器上安装了 WordPress,它运行良好。现在我尝试在同一台服务器上设置另一个使用 Flask 制作的应用程序。这是我的.conf
文件现在的样子:
<Directory /var/www/html/mydomain.com/public_html>
Require all granted
</Directory>
<VirtualHost 127.0.0.1:80 *:80>
ServerName mydomain.com
ServerAlias www.mydomain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/mydomain.com/public_html
WSGIDaemonProcess test user=www-data group=group-wp threads=5
WSGIScriptAlias /newsletter /var/www/newsletter.wsgi
<Directory /var/www/html/mydomain.com/public_html/newsletter>
WSGIProcessGroup test
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
ErrorLog /var/www/html/mydomain.com/logs/error.log
CustomLog /var/www/html/mydomain.com/logs/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mydomain.com [OR]
RewriteCond %{SERVER_NAME} =mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
我的 Flask 应用程序test.py
如下所示
import sqlite3
from flask import Flask, g, jsonify, abort, request
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
return "testing"
@app.route('/api/list', methods=['GET'])
def list_all():
return "also testing"
if __name__ == '__main__':
app.run()
我的newsletter.wsgi
文件如下所示:
import sys
sys.path.insert(0, '/var/www/newsletter')
from test import app as application
我已经安装了libapache2-mod-wsgi-py3
运行 wsgi 脚本,但在mydomain.com/newsletter
、mydomain.com/api_list
以及mydomain.com/newsletter/api_list
我尝试过的所有其他组合.htaccess
处都出现了 404 页面。我应该更改吗?我的 Flask 应用程序应该与 WordPress 位于同一目录中吗?我已经尝试将应用程序目录移动到public_html
并将规则添加RewriteCond %{REQUEST_URI} !^/newsletter
到.htaccess
文件,但它只显示.py
和.wsgi
文件,而不是运行脚本。
答案1
以下是我解决问题的方法:
- 我正在更改非 SSL
.conf
文件。certbot
(来自 Let's Encrypt)会自动.conf
使用新的 SSL 设置创建一个新文件 - mod_wsgi 使用的是 Python 2,但未安装 Flask
- 我卸载了 mod_wsgi,用 更新了 Apache
apt-get
,然后用 重新安装了 mod-wsgipip3 install mod_wsgi
。更多详细信息这里 - 我检查了 error.log 以找出剩余的错误