Apache 功能介绍
一、Apache文件简介
夹内文件如下 启动文件夹 配置文件夹 日志文件这三个比较常用
1.1主文件夹
在extra有扩展文件夹 里面的httpd-ssl.conf 配置ssl证书的和http-vhosts.conf文件配置虚拟主机的 可以设置多个端口
1.2配置文价
装完第一件事就是在conf配置文件夹里http.cof文件里改端口和自己对呀的安装路径配置
2.监听端口设置
3、默认索引位置 存放起始页面,我们用wsgi的启动模块所以就不要用设置了
1.3Apache mod_wsgi模块简介
Apache HTTP服务器的mod_wsgi扩展模块,实现了Python WSGI标准,可以支持任何兼容Python WSGI标准的Python应用。
-
WSGI(Web Server Gateway Interface)是一个统一的Python接口标准(PEP 3333),该标准描述了Python应用如何与Web服务器通信,多个Python应用之间如何级联以处理请求。
WSGI的实现位于Python应用和Web服务器之间,从而支持将兼容的Python应用无缝部署到任何Web服务器上。 -
Apache服务器对Python WSGI应用的执行模式
1)embedded模式
在Apache的子进程中执行Python WSGI应用。这样,Python WSGI应用将与Apache上的其他应用共享进程。
执行性能高,但需要调整Apache MPM设置。
2)daemon模式(推荐)
Apache启动专用进程执行Python WSGI应用,但是Python WSGI应用需要提供进程监控或WSGI适配器。
执行更安全。
- mod_wsgi扩展模块的安装
1)建议安装环境
Python 2.6或Python 3.3以后版本
Apache 2.4以后版本
2)作为Apache的一个扩展模块,以源代码安装到Apache服务器
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.14.tar.gz
tar xvfz mod_wsgi-4.5.14.tar.gz
./configure
make
make install
LoadModule wsgi_module modules/mod_wsgi.so
service httpd restart
在启动服务器之前,还需要配置Apache服务器以加载mod_wsgi扩展模块,将Web请求转发到该模块处理。
3)作为Python安装包,以源代码安装到Python的虚拟环境
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.14.tar.gz
tar xvfz mod_wsgi-4.5.14.tar.gz
python setup.py install
4)作为Python安装包,从PyPI在线安装到Python的虚拟环境
pip install mod_wsgi
4.验证安装
利用mod_wsgi-express命令行工具,启动Apache服务器和mod_wsgi扩展模块,无需任何配置。
mod_wsgi-express start-server
1.4Django 的debug和allowed_HOS设置
1.如果开启了DEBUG模式,那么以后我们修改了Django项目的代码,然后按下ctrl+s,那么Django就会自动的给我们重启项目,不需要手动重启。
2.如果开启了DEBUG模式,那么以后Django项目中的代码出现bug了,那么在浏览器中和控制台会打印出错信息。否则的我们很难寻找到bug的位置,也不方便调试代码。
在生产环境中,禁止开启DEBUG = True,因为当你的网站出错误时,别人能看到你的源代码,而我们也不需要给用户看到这些错误信息。所以需要关掉DEBUG = True,即设置DEBUG = False
如果设置了DEBUG = False,那么就必须设置settings.py中的ALLOWED_HOSTS.
ALLOWED_HOSTS:这个变量是用来设置以后别人只能通过这个变量中的ip地址或者域名来进行访问。
二、报错解决
Apache报错:argumer for all must require all…
一般都是字符或自己打错了,根据提示的第几行去发现
在写的时候注意 有的末尾有空格 导致识别不了字符
Django报错:10013访问权限不允许
这个报错的原因是因为django的端口被占用,只需要把8080端口改成其他的就可以了
检测apachen是否识别到了wsgi启动模块
于是我在原来wsgi.py后缀加了1 看看apachen是否识别到这个一步,果然看了apache的错误日志文件发现了检测出 说明apachen这一端识别的了我们输入的host主机名,只是mod_wsgi启动不成功,
我们改回来 再到其他文件上加点错误
启动Apache报错:cannot define multiple Listeners on the sa,e IP:prot
这是由于443端口被占用了,我们把apache配置httpd.conf里的listen443取消注释后,就能正常部署项目
启动apache报错: the requested operation has filed
这是因为配置出错了,需要去检查配置文件,
1、端口问题被占用
2、django的启动路径有问题
3.mod_wsgi路径有问题
因为python3.5的版本虚拟环境是自带的,所以安装mod _wsgi会只出问题
访问网页报错:forbidden
这是因为权限的原因
只需要添加以下授权的代码
<Directory “要访问的文件路径”>
Require all granted
访问网页报错:Bad Request
访问网页一直在加载转
在httpd.conf末尾里加上这句 ,这句是用python解释器强制解析识别不了库,这个问题困扰了我好几天
WSGIApplicationGroup %{GLOBAL}
这是因为你访问的443端口要走https协议 默认是走http协议,所以你要再访问的前缀http://改成 https
三、安装ssl证书
参考:https://www.cnblogs.com/potatog/p/10670776.html
3.1打开ssl的拓展模块
要打开证书扩展模块,证书文件才会程出现
把主配置文件httpd.conf的
LoadModule ssl_module modules/mod_ssl.so 取消注释
Include conf/extra/proxy-html.conf也取消注释
然后在#Include conf/extra/httpd-ssl.conf下面写一行加一行配置信息
Include conf/extra/ssl.conf
就是我们用自己的配置文件 不用原来的http-ssl.conf,因为原来的内容太多
3.2导入证书到配置中
打开extra文件下新建一个ssl.conf配置文件
3.3导入腾讯云ssl证书
这是我们腾讯云免费申请的ssl证书 下载下来后就有三个文件
在apachen的目录下新建cert文件夹 复制三个证书文件到cert目录下
再到Apache24\conf\extra下的我们自己新建ssl.conf里添加代码
Listen 443
<VirtualHost *:443>
ServerName www.chaochaotool.top
ServerAlias example.com
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "${SRVROOT}/cert/2_www.chaochaotool.top.crt"
SSLCertificateKeyFile "${SRVROOT}/cert/3_www.chaochaotool.top.key"
SSLCertificateChainFile "${SRVROOT}/cert/1_root_bundle.crt"
DocumentRoot "C:/xmprogram/cqc/cqc_01"
<Directory "C:/xmprogram/cqc/cqc_01/">
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride all
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
ssl证书配置是下面这样按照路径改 其中
${SRVROOT}的意思就是我们在httpd.conf里面设置的apache配置的根目录
给大家科普一下,http+ssl=https就是加密的传输方式,我们与网站进行连接都是三次握手的方式传输文件,所以会访问对方我公钥文件,私钥用来辨别身份的,只有自己的私钥可以解开自己的公钥。以下文件注意路径:
这是ssl的设置文件
#ssl的设置文件
SSLCertificateChainFile "${SRVROOT}/cert/1_root_bundle.crt"
#网站域名的公钥文件
SSLCertificateFile "${SRVROOT}/cert/2_www.chaochaotool.top.crt"
#网站域名的私钥文件
SSLCertificateKeyFile "cert/3_www.chaochaotool.top.key"
配置完后用https访问我们自己的域名,就可以成功咯