Apache
推荐链接
查找旧版本的几种方法
这里尤其是要注意上面的链接,如果点击搜索搜索不出来对应的版本,那么找一个类似的版本,看头上链接的规律,那么有很大几率搜索出来
Windows下Apache安装步骤
Apache配置文件httpd.conf
ServerRoot "/apache" #你的apache软件安装的位置。其它指定的目录如果没有指定绝对路径,则目录是相对于该目录。
Listen 80 #服务器监听的端口号。
ServerName localhost:80 #主站点名称(网站的主机名)。
DocumentRoot "/web/" #主站点的网页存储位置。 也就是你PHP项目存放的路径,例如wampserver的根路径是 "/wamp64/www"
<Directory "D:/wamp64/www">
ScriptAlias /cgi-bin/ "/cgi-bin/"
<Directory "D:/wamp64/Apache24/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
#引用PHP和apache的集成包
LoadModule php5_module "D:/wamp64/bin/php/php5.6.25/php5apache2_4.dll" #如果没有集成包,可以在网上找类似的so文件,网上有相应教程
AddHandler application/x-httpd-php.php
PHPIniDir "D:\wamp64\bin\php\php5.6.25" #php.ini存在的目录
#如果PHP成功运行,但是网站url报错,可以试着修改下面的代码
LoadModule rewrite_module modules/mod_rewrite.so
AllowOverride All
<IfModule dir_module>
#DirectoryIndex index.html
DirectoryIndex index.php index.php3 index.html index.htm
</IfModule>
<Directory>
配置块通常用于对特定目录应用自定义配置,以满足特定需求。你可以在 <Directory> 块中设置一系列的指令,这些指令将仅适用于被指定的目录及其子目录。
以下是一些常见的 <Directory> 块中使用的指令:
Options: 设置目录的选项,如 Indexes(启用目录索引)、FollowSymLinks(跟随符号链接)等。
AllowOverride: 指定是否允许使用 .htaccess 文件来覆盖全局配置,以实现特定目录的自定义配置。
Require: 定义访问控制规则,指定哪些用户或来源可以访问目录中的内容。
DirectoryIndex: 指定目录索引文件的名称,默认情况下,Apache 在访问一个目录时会尝试加载文件列表或默认文件(如 index.html、index.php)。
AddHandler、SetHandler: 用于设置特定文件类型的处理程序,如 PHP 脚本的处理程序。
RewriteRule: 定义 URL 重写规则,用于重定向或修改请求 URL 的行为。
<IfModule dir_module>
表示一个条件块,用于检查是否加载了 dir_module 模块。如果该模块已加载,条件块中的指令将生效。
DirectoryIndex index.html
这个指令指定了默认的目录索引文件名称为 index.html。当用户请求一个目录时(例如 http://example.com/),如果在该目录中存在 index.html 文件,Apache 将返回该文件作为默认响应。
Windows下Apache部署SSL证书让网站支持https的配置方法(自签证书)
如果是集成环境,一般情况下会自带openssl,如果按照上文下载apache.zip进行配置,请检查是否配置了相应文件,
[Apache安装目录]/modules/ mod_ssl.so
[Apache安装目录]/bin/ openssl.exe, libeay32.dll, ssleay32.dll, openssl.cnf
[Apache安装目录]/conf/ openssl.cnf
如果bin目录下没有openssl.cnf,需要将conf下的openssl.cnf拷贝一份到bin目录下
步骤一
备份,备份,备份(重要的事情说三遍)
[Apache安装目录]/modules
[Apache安装目录]/bin
[Apache安装目录]/conf
文件夹下面的建议全部备份一遍
步骤二
在httpd.conf 中添加下列两行(有的话把文件前面的注释“#”符号去掉)
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
在遇见:"Syntax error on line 76 of C:/apache/conf/extra/httpd-ssl.conf:SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?)."
错误时候可以尝试将下面这个的# 去除
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
步骤三
日志的路径很重要,很重要,一定要根据自己安装的apache路径来定,一帮情况下,报错都是日志路径设置错误
在conf\extra目录下,编辑 httpd_ssl.conf
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache "dbm:D:/wamp64/Apache24/logs/ssl_scache"
#SSLSessionCache "shmcb:D:/wamp64/Apache24/logs/ssl_scache(512000)"
(以上2种请自行监测,如有一种导致服务器启动不了,就换成另一种)
#下面带路径的都要注意,最好用绝对路径,server.crt和server.key这个就是openssl进行生成的,名称可以随意修改
<VirtualHost _default_:443>
DocumentRoot "D:/wamp64/www"
ServerName localhost:443
ServerAdmin admin@example.com
ErrorLog "D:/wamp64/logs/apache_error.log"
TransferLog "D:/wamp64/logs/access.log"
SSLEngine on
SSLCertificateFile "D:/wamp64/bin/apache/apache2.4.23/conf/server.crt"
SSLCertificateKeyFile "D:/wamp64/bin/apache/apache2.4.23/conf/server.key"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "D:/wamp64/Apache24/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
步骤四
CMD,进入到Apache安装目录下的bin目录下(权限不足可以使用PowerShell打开,权限还不足就右键目录:属性->安全->编辑)
set OPENSSL_CONF=..\conf\openssl.cnf #临时设置了 OPENSSL_CONF 环境变量,只在当前的命令行会话中有效
openssl genrsa 1024 >server.key
openssl req -new -config openssl.cnf -key server.key >server.csr
之后就会要求输入一系列的参数:
#'Common Name建议和httpd.conf中serverName必须一致,否则有可能导致apache不能启动'
Country Name (2 letter code) [AU]:CN 国家代码(只支持两位字符)这里我填CN
State or Province Name (full name) [Some-State]: 所在省份
Locality Name (eg, city) []: 所在城市
Organization Name (eg, company): (组织名称)
Organizational Unit Name (eg, section) []: (组织单位名称)
Common Name (eg, YOUR name) []: localhost:80 申请证书的域名(建议和httpd.conf中serverName必须一致,不然可能会有未知错误)
Email Address []: 管理员邮箱
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: 交换密钥
An optional company name []: (可选的公司名称)
openssl req -x509 -days 5000 -config openssl.cnf -key server.key -in server.csr >server.crt
#执行完上面命令可以获得 server.crt、server.csr、server.key
步骤五
在bin 目录下,找到server.crt、server.csr、server.key三个文件,将此三个文件剪切到Apache的conf目录下。
然后重启apache
(PS:如果你自己在系统->关于->高级系统设置->环境变量) 里面设置了一些关于apache和openssl的环境变量,切记一定要重启电脑
Windows下 Apache配置虚拟主机
物理主机hosts文件位于(C:\Windows\System32\drivers\etc)
[Apache安装目录]
多端口配置(IP不变而不同项目使用不同端口)
[Apache安装目录]\conf\httpd.conf
//进入conf文件夹下面的httpd.conf 文件,找到下面两句话,将 # 去除
#LoadModule rewrite_module modules/mod_rewrite.so
#Include conf/extra/httpd-vhosts.conf
//Listen 指令,它指定了 Apache 监听的端口。默认情况下,它通常是 Listen 80。
//在它下面添加一个新的 Listen 指令来指定额外的端口。
Listen 8081
[Apache安装目录]\conf\extra\httpd-vhosts.conf
/**
<VirtualHost *:80>: 定义了一个虚拟主机,它监听所有传入的请求(*)并使用端口 80。这表示该虚拟主机将处理通过 HTTP(非加密)协议访问的请求。
正常情况,系统已经有80端口了。需要做的事情就是原本的拷贝一份到下面,然后修改对应端口和虚拟主机的根目录就可以了,其他的不用修改。
*/
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "c:/Apache24/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
<VirtualHost *:8081>
ServerAdmin "指定了服务器管理员的电子邮件地址"
DocumentRoot "虚拟主机的根目录,即服务器上该虚拟主机的网站文件的存放位置"
ServerName "虚拟主机的主机名。这是用户在浏览器中输入的域名或 IP 地址,用于访问该虚拟主机"
ErrorLog "错误日志文件的路径和文件名。当发生错误或警告时,Apache 将在这个文件中记录错误信息"
CustomLog "访问日志文件的路径和文件名,以及要记录的日志格式"
</VirtualHost>
Apache开启Gzip压缩
[Apache安装目录]/conf/httpd.conf
'打开此文件查找如下三行代码,前面没有#符号即为正常的,若是有#符号则表示被注释掉了,删除前面的#符号即可'
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule filter_module modules/mod_filter.so
'在 Apache 配置文件 httpd.conf 的最后添加:'
<IfModule deflate_module>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc|avi|mov|mp3|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
/**
IfModule deflate_module 是判断如果 deflate_module 模块加载的话,执行里面的配置。
SetOutputFilter DEFLATE 是设置输出为 deflate 压缩算法。
SetEnvIfNoCase Request_URI 是排除一些常见的图片,影音,文档等类型的后缀,不压缩。
AddOutputFilterByType DEFLATE 是对常见的文本类型,如html,txt,xml,css,js做压缩处理。
*/
//PHP中校验是否开启了gzip压缩
<?php
$isGzipEnabled = false;
if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
$isGzipEnabled = true;
}
if ($isGzipEnabled) {
echo "Apache 开启了 gzip 压缩。";
} else {
echo "Apache 没有开启 gzip 压缩。";
}
?>