Apache官网没有Windows安装包,只有源码需要自己编,可以下载ApacheHaus编译版
下载:httpd-2.4.46-o111j-x64-vc15.zip https://download.csdn.net/download/fm0517/15466535
解压到本地目录E:\GreenSoftware\Apache24
编辑Apache的配置文件:Apache24/conf/httpd.conf
将
Define SRVROOT "/Apache24"
改为
Define SRVROOT "E:\GreenSoftware\Apache24"
至此可以通过命令/Apache24/bin/httpd.exe启动Apache,然后在浏览器中可以看到Apache的欢迎页面。
如果出现错误,可以检查标准输出或者/Apache24/logs/error.log
常见的错误原因可能是端口号80(或443)被别的进程占用。用命令
netstat -ano|findstr 80
netstat -ano|findstr 443
将对应的进程停掉,然后重启httpd.exe即可。
从官网找到python-3.8.5-amd64.exe
点此处下载:https://www.python.org/downloads/windows/
Apache HTTP服务器的mod_wsgi扩展模块,实现了Python WSGI标准,可以支持任何兼容Python WSGI标准的Python应用,当然也包括了Flask。
下载:mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl https://download.csdn.net/download/fm0517/15466562
把下载的.whl文件复制到python38\Scripts下,然后使用pip进行安装
D:\Python38\Scripts>pip install mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl
Processing d:\python38\scripts\mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl
Installing collected packages: mod-wsgi
Successfully installed mod-wsgi-4.7.1
WARNING: You are using pip version 20.3.1; however, version 21.0.1 is available.
You should consider upgrading via the 'd:\python38\python.exe -m pip install --upgrade pip' command.
安装成功后在python38\Scripts下运行
D:\Python38\Scripts>mod_wsgi-express module-config
LoadFile "d:/python38/python38.dll"
LoadModule wsgi_module "d:/python38/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd"
WSGIPythonHome "d:/python38"
将安装后生成的文件mod_wsgi.cp38-win_amd64.pyd移动到Apache的modules目录下
E:\GreenSoftware\Apache24\modules\mod_wsgi.cp38-win_amd64.pyd
编辑Apache的配置文件:Apache24/conf/httpd.conf
增加模块引入:
LoadModule wsgi_module modules/mod_wsgi.cp38-win_amd64.pyd
去掉模块mod_vhost_alias.so前的注释
LoadModule vhost_alias_module modules/mod_vhost_alias.so
目录结构
文件hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def root():
return '<h1>网站建设中</h1>'
@app.route('/hello')
def hello():
return '<h1>Hello world!</h1>'
if __name__ == '__main__':
app.run()
文件wsgi.py
import sys
sys.path.insert(0, "D:/000/testweb")
from hello import app
application = app
<VirtualHost *>
WSGIScriptAlias / D:\000\testweb\wsgi.py
<Directory 'D:\000\testweb'>
Require all granted
Require host ip
</Directory>
</VirtualHost>
一定是http://localhost/hello,不能https
域名绑定也能正常发布
网上的主要说法都认为,Apache,Python,mod_wsgi必须版本匹配,主要是Python版本对应的编译器,和Apache版本对应的编译器应保持相同。查看对应版本的方法如下:
【Python版本号和编译器版本号】
【编译器版本号和VS/VC大版本的对应关系】
microsoft官方文档https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-160
【Apache预编译包的编译器版本】
实践过程中发现对于Python3.8.5,编译器版本1924来说,Apache无论是vc15还是vs16,都没有问题。
做完步骤5以后,总是出不来Flask项目的界面,我反复查一直以为是flask的wsgi没能正确调用。折磨了好久最后才发现如果是http就可以,https就不行。如图:
原因后面再谈就,希望看到这里的人,不必和我一样为了查原因而走弯路,耽误过多的时间。