Apache简单配置与服务优化
一、Apache相关文件保存位置
1.1配置文件位置:
源码包安装的apache:
PREFIX/etc/httpd.conf(主配置文件)
#主配置文件约500行,剩下的500行被拆开存放在子配置文件中
PREFIX/etc/extra/*.conf(子配置文件)
#子配置文件如果想生效,主配置文件需要调用它
rpm包安装的apache:
/etc/httpd/conf/httpd.conf
#约1000行
1.2网页文件位置:
源码包安装的:
PREFIX/htdocs/
rpm包安装的:
/var/www/html/
1.3日志文件位置:
源码包安装的:
PREFIX/logs/
rpm包安装的:
/var/log/httpd/
二、配置文件详解
2.1针对主机环境的基本配置参数
注意:配置文件严格区分大小写
ServerRoot /usr/local/apache2/
#apache主目录(apache的安装目录)
Listen :80
#监听端口(默认监听所有网卡的80端口)
#如果需要监听某一网卡的端口,添加IP地址即可,如:192.168.8.88:80
LoadModule php7
#加载的相关模块
User
Group
#用户和组(apache运行时它使用的用户和组)
ServerAdmin
#管理员邮箱
ServerName
#服务器名(没有域名解析时,使用临时解析。默认不开启)
ErrorLog ”logs/error_log”
#服务器错误日志
CustomLog “logs/access_log”
#访问记录日志(包含访问成功的和访问不成功的)
DirectoryIndex index.html index.php
#默认网页文件名,优先级顺序(访问时,优先显示的页面文件)
Include /etc/ectra/httpd-vhosts.conf
#子配置文件中内容也会加载生效(用于调用子配置文件)
2.2主页目录及权限
DocumentRoot “/usr/local/apache2/htdocs”
#网页文件存放目录(默认)(rpm包安装的apache见1.2)
<Directory “/usr/load/apache2/htdocs”>
#定义指定目录的权限(声明”网页文件默认存放目录”的权限)
#(如果更改网页文件默认存放目录,此项也需要更改)
Options Indexes FollowSymLinks
#访问服务器时的权限(默认是浏览权限)
None #没有任何额外权限
All #所有权限(除去MultiViews以外)
Indexes #浏览权限(当此目录下没有默认文件时,显示目录内容)
FollowSymLinks #准许软连接到其他目录
MultiViews #准许文件名泛匹配(需要手动开启negotiation模块才有效)
AllowOverride None
#定义是否允许目录下.htaccess文件中的权限生效
None #.htaccess中权限不生效
All #文件中所有权限都生效
AuthConfig #文件中,只有网页认证的权限生效
Require all granted (denied)
#访问控制列表
denied #不开启
</Directory>
<IfModule dir_module>
#此标签用来指定访问到指定目录时自动加载哪个页面文件
DirectoryIndex index.php index.html #可以写多个,但是有优先级之分
</IfModule>
三、修改网页文件默认存放目录
(因为我在安装centos系统时创建了一个“/www”的分区,准备存放页面文件。又不太喜欢设置“apache目录别名”故而更改默认目录。不需要的请略过)
3.1Apache小贴士禁用apache测试页
[root@localhost conf.d]# vim /etc/httpd/conf.d/welcome.conf
#操作:将welcome.conf中的配置项,均使用“#”注释掉
3.2更改网页文件默认存放目录
[root@localhost conf]# vim /etc/httpd/conf/httpd.conf
操作1:
找到DocumentRoot “/var/www/html/”,更改为你想要的位置(“/var/www/html/”内容因为apache的安装方式不同,这里的路径也不同,这里是rpm包安装方式的位置)
操作2:
找到<Directory “/var/www/html/”>更改为你想要的位置(必须与DocumentRoot位置相同)
注:更改时注意路径完整性,如“/www”与“/www/”
操作3:
重启apache服务,使更改生效
四、修改默认网页首页
[root@localhost conf]# vim /etc/httpd/conf/httpd.conf
#操作:找到DirectoryIndex index.html index.php,更改为你需要的默认网页文件名
vim /etc/httpd/conf.d/php.conf
这个配置文件也有DirectoryIndex也需要修改
五、Apache+openssl实现https
5.1 检查ssl_module模块是否安装
注:模块存放目录:
apache主目录/modules
检查命令:
[root@localhost conf]# apachectl -M
在列出的模块中寻找“ ssl_module ”,如果为“ ssl_module (shared)”证明已安装该模块并且已开启,如果为“ ssl_module (static)”证明已安装但未开启。如果未找到见5.1.2
5.1.1ssl_module模块开启方法
如果是源码包安装的apache,请在apache安装目录下httpd.conf配置文件中,查找 LoadModule ssl_module modules/mod_ssl.so(用于加载 SSL 模块)和 Include conf.modules.d/*.conf(用于加载配置 SSL 的配置目录)配置语句,并检查是否被注释。
5.1.2
如果是rpm包安装的apache,或者根据上述方法未找到该配置语句,由于操作系统的版本不同,目录结构也不同,请根据实际操作系统版本进行查找。
LoadModule ssl_module modules/mod_ssl.so和 Include conf.modules.d/*.conf 配置语句可能在以下配置文件中:
conf.modules.d 目录下的 00-ssl.conf 配置文件。
httpd.conf 配置文件。
http-ssl.conf 配置文件。
若以上配置文件中均未找到 LoadModule ssl_module modules/mod_ssl.so 和 Include conf.modules.d/*.conf 配置语句,请确认是否已经安装 mod_ssl.so 模块(确认方法:在apache主目录/modules/里寻找mod_ssl.so)。
若未安装 mod_ssl.so 模块,您可通过执行 yum install mod_ssl 命令进行安装。(若已安装但就是找不到,可以借鉴https://www.cnblogs.com/fsjohnhuang/p/3997211.html的查找命令,也可以借鉴https://blog.csdn.net/ordream/article/details/90262348说明的路径)
5.1.3rpm包安装的apache也可参考本人的情况
我是rpm包安装的apache,在httpd.conf未找到LoadModule ssl_module modules/mod_ssl.so 和 Include conf.modules.d/*.conf 配置语句。
执行yum install mod_ssl命令安装模块之后,在/etc/httpd/conf/httpd.conf配置文件中找到了Include conf.d/*.conf 配置语句(代替Include conf.modules.d/*.conf),在/etc/httpd/conf.d/目录下找到了ssl.conf,在ssl.conf配置文件里找到了LoadModule ssl_module modules/mod_ssl.so
执行命令apachectl -M,发现显示 ssl_module (shared),成功。
5.2 CA证书申请
5.2.1
在生产环境中必须要去https证书厂商注册(否则浏览器不识别)
5.2.2
去https厂商注册的过程略过~(不会太难,RMB是个好东西,注册完成后把证书+密钥下载下来)
5.2.3
把密钥和证书文件存放在:Apache的安装目录/cert/
如果没有这个文件夹,就创建一个
[root@localhost httpd]# mkdir cert
5.2.4实验环境可以自己生成CA证书
仍然需要在apache主目录下创建cert
生成CA证书:
在cert目录下执行命令:
[root@localhost cert]# openssl genrsa -out ca.key 1024
#创建服务器私钥,生成RSA密钥(生成密钥,“ca.key”名称可自定义)
[root@localhost cert]# openssl req -new -key ca.key -out atguigu.csr
#通过密钥“ca.key”,生成证书文件“atguigu.csr”名称可自定义。
#需要依次输入国家,地区,城市,组织,组织单位,common name,Email,A challenge password,An optional company name等信息。
#A challenge password,An optional company name可以直接回车不填。
#最重要的是有一个common name,可以写你的名字或者域名。生产环境中,这个必须和域名吻合,否则会引发浏览器警报。
#(生产环境common name并非使用该命令填写,而是在申请https证书时,在https证书厂商处填写)
#生成的csr文件交给CA签名后形成服务端自己的证书。注:如果填写时出错,需按ctrl+删除键或alt+删除键或shift+删除键,删除。
[root@localhost cert]# openssl x509 -req -days 365 -sha256 -in atguigu.csr -signkey ca.key -out atguigu.crt
#使用CA服务器签发证书(通过密钥ca.key与atguigu.csr生成签字证书“atguigu.crt”)
至此,无论是生产环境申请的https证书和密钥文件或者实验环境生成的https证书和密钥文件,都在apache主目录/cert/下准备好了!
5.3配置文件修改(适用于源码包安装的apache)
5.3.1修改主配置文件httpd.conf调用ssl模块,并启用ssl独立配置文件
vim /usr/local/apache2/etc/httpd.conf
#不同的安装方法httpd.conf位置不尽相同
操作1 :
LoadModule ssl_module modules/mod_ssl.so #取消该行注释
#该语句目的是调用ssl模块,在5.1操作过的无需再次操作
操作2 :
Include etc/extra/httpd-ssl.conf #取消该行注释
#该语句目的是启用ssl独立配置文件(子配置文件)
5.3.2修改conf/extra/httpd-ssl.conf配置文件(子配置文件),调用证书+密钥
SSLProtocol all -SSLv2 -SSLv3
#添加SSL协议支持协议,去掉不安全的协议
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
#修改加密套件
SSLHonorCipherOrder on
#开启密钥+证书这种认证方式
SSLCertificateFile cert/atguigu.crt
#证书公钥配置(签字的。后缀为crt,非csr)
SSLCertificateKeyFile cert/ca.key
#证书私钥配置
#注:以上修改,注意某些语句在httpd-ssl.conf配置文件中已存在,需注释掉已存在的语句
5.3.3修改主配置文件,添加虚拟主机
因为一个apache服务器(默认)无法监听两个端口,所以添加一个虚拟主机来解决443端口监听问题
<VirtualHost _default_:443>
#_default_:443可以改为*:443
DocumentRoot “/usr/local/apache2/htdocs/”
#DocumentRoot 目录位置要和“网页文件默认存放目录”一致
ServerName localhost:443
SSLCertificateFile cert/atguigu.crt
SSLCertificateKeyFile cert/ca.key
SSLCertificateChainFile cert/atguigu.crt
</VirtualHost>
#注:以上语句添加在主配置文件末尾
5.3.4结果验证
apache -t #检查配置文件语法
报错提示:AH00526:Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf:SSLSessionCache: ’shmcb’ session cache not supported (known names:). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).
解决方案:要么不调用此模块,要么让调用的模块加载上
操作:编辑httpd.conf配置文件,搜索mod_socache,找到LoadModule socache_shmcb_module modules/mod_socache_shmcb.so取消注释
报错提示:httpd: Could not reliably determine the server’s fully qualified domain name, using localhost.localdomain for ServerName
解决方案:编辑主配置文件取消ServerName www.example.com:80
语句的注释,并更改域名。(www.example.com与你正在使用的域名并不相关吧?)
报错提示:[Mon Mar 23 19:30:09 2020] [warn] default VirtualHost overlap on port 443, the first has precedence
解决方案:编辑主配置文件添加NameVirtualHost *:443
5.4配置文件修改(适用于rpm安装的apache)
5.4.1修改/etc/httpd/conf.d/ssl.conf配置文件,调用证书+密钥
SSLProtocol all -SSLv2 -SSLv3
#添加SSL协议支持协议,去掉不安全的协议
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
#修改加密套件
SSLCertificateFile cert/atguigu.crt
#证书公钥配置(签字的。后缀为crt,非csr)
SSLCertificateKeyFile cert/ca.key
#证书私钥配置
注:以上修改,注意某些语句在ssl.conf配置文件中已存在,需注释掉已存在的语句
5.4.2修改主配置文件,添加虚拟主机
因为一个apache服务器(默认)无法监听两个端口,所以添加一个虚拟主机来解决443端口监听问题
<VirtualHost _default_:443>
#_default_:443可以改为*:443
DocumentRoot "/www/"
#DocumentRoot 目录位置要和网页文件默认存放目录一致
ServerName localhost:443
SSLCertificateFile cert/atguigu.crt
SSLCertificateKeyFile cert/ca.key
SSLCertificateChainFile cert/atguigu.crt
</VirtualHost>
#注:以上语句添加在httpd.conf末尾
5.4.3结果验证
apache -t #检查配置文件语法
报错提示:httpd: Could not reliably determine the server’s fully qualified domain name, using localhost.localdomain for ServerName
解决方案:编辑主配置文件取消ServerName www.example.com:80
语句的注释,并更改域名。(www.example.com与你正在使用的域名并不相关吧?)
报错提示:[Mon Mar 23 19:30:09 2020] [warn] default VirtualHost overlap on port 443, the first has precedence
解决方案:编辑主配置文件添加NameVirtualHost *:443
5.5强制跳转https
为了更加安全,一律使用户从https访问,即便用户使用http访问也会跳转为https
编辑httpd.conf配置文件
在http部分的目录权限标签中添加以下内容:
RewriteEngine on
#开启转发规则
RewriteCond %{SERVER_PORT} !^443$
#检查访问端口只要目标不是443的
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]
#全部使用https重新访问
#注:将以上语句添加到“网页文件默认存放目录”的权限标签处
六 Apache日志分割
为避免日志文件过大不好管理使用apache相关配置,使日志文件按照我们的需求进行归档,比如:一天一个新日志。
6.1设置日志分割
编辑配置文件httpd.conf
找到以下语句:
ErrorLog logs/error_log
CustomLog logs/access_log combined
#全部注释掉,并在各语句的下一行分别添加以下内容
ErrorLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/access_%Y%m%d.log 86400" combined
#注意:若开启了https,也需要修改http-ssl.conf配置文件中的日志记录条目(主配置文件httpd.conf与http-ssl.conf都要修改)
#注意:以上两条语句中“/usr/sbin/rotatelogs”与“/etc/httpd/logs/”由于apache安装方式不同,这里的路径也不同,这里使用的路径是rpm包安装的apache支持的路径,若您是源码包安装的apache请使用locate -b "\rotatelogs"命令搜索“rotatelogs”路径。logs路径同理。
ErrorLog是错误日志,CustomLog是访问日志。|就是管道符,意思是把产生的日志交给rotatelog这个工具,而这个工具就是apache自带的日志切割工具。-l的作用是校准时区为UTC,也就是北京时间。86400,单位是秒,正好是一天,那么日志会每天切割一次。而最后面的combined为日志的格式,在httpd.conf中有定义。
6.2日志分割http-ssl.conf配置文件的修改
由于本人开启了https,http-ssl.conf配置文件的修改也可以借鉴本人的方法
编辑http-ssl.conf配置文件,找到以下语句,并注释掉:
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
#此语句我理解为“压缩无错误的SSL日志文件”
#然后在各语句的下一行分别添加以下内容
ErrorLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/ssl_error_%Y%m%d.log 86400"
TransferLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/ssl_access_%Y%m%d.log 86400"
CustomLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/ssl_request_%Y%m%d.log 86400" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
#注意:仍然需要更改为你自己的路径,(路径与主配置文件httpd.conf相同,但是请注意该日志分割语句与主配置文件的日志分割语句的区别)
小贴士:如果服务器时间不准,建议同步北京时间,命令如下:
[wendy@wendy /]$ sudo ntpdate time.windows.com
#短时间内多次执行此命令,会遭到时间同步服务器屏蔽(执行一次即可)
[wendy@wendy /]$ sudo hwclock -w
#把时间信息写入BIOS,防止失效
七 不记录指定文件类型的日志
在访问日志中图片及js、css等静态对象的日志没有什么用,是可以忽略掉的
7.1配置日志不记录图片的访问
编辑apache的主配置文件httpd.conf
在http部分的目录权限标签中添加以下内容(或者说添加到“网页文件默认存放目录”的权限标签处)
SetEnvIf Request_URI ".*\.gif$" image-request
SetEnvIf Request_URI ".*\.jpg$" image-request
SetEnvIf Request_URI ".*\.png$" image-request
SetEnvIf Request_URI ".*\.bmp$" image-request
SetEnvIf Request_URI ".*\.swf$" image-request
SetEnvIf Request_URI ".*\.js$" image-request
SetEnvIf Request_URI ".*\.css$" image-request
#说明:把.gif、.jpg、.png、.bmp、.swf、.js、.css后缀的请求,标记为image-request(让image-request代表.gif、.jpg、.png、.bmp、.swf、.js、.css后缀的请求)
#然后在CustomLog "......_%Y%m%d.log 86400" combined后面添加标记env=!image-request
#如:CustomLog "|/usr/sbin/rotatelogs -l /etc/httpd/logs/access_%Y%m%d.log 86400" combined env=!image-request
(只能在“CustomLog访问日志配置语句”后面加env=!image-request,其他访问日志配置语句不要加,ssl.conf配置文件我试过,没添加成功,有兴趣的人可以试试)
(env=!image-request该标记表示不记录.gif、.jpg、.png、.bmp、.swf、.js、.css后缀的请求)
八、Apache配置静态缓存
静态文件是指图片、js、css等文件,配置静态缓存后,静态文件会被浏览器缓存到本地,目的是为了下次请求时不必再去服务器下载,这样就加快了速度,提高了用户体验。
8.1配置静态缓存
需要使用mod_expires模块,此模块默认未启动,需要启动此模块。
编辑主配置文件httpd.conf,在httpd.conf末尾添加以下内容:
<IfModule mod_expires.c>
ExpiresActive on
#ExpiresActive On是指启用mod_expires功能,相对的Off就是关闭功能.
ExpiresByType image/gif "acces plus 5 min"
#声明--某类型--缓存时间
#ExpiresByType指令是依照不同的网页文件型态来做过期时间设定.
ExpiresByType image/jpeg "acces plus 5 min"
ExpiresByType image/png "acces plus 5 min"
ExpiresByType text/css "now plus 5 min"
ExpiresByType application/x-javascript "now plus 5 min"
ExpiresByType application/javascript "now plus 5 min"
ExpiresByType application/x-shockwave-flash "now plus 5 min"
ExpiresDefault "now plus 0 min"
#ExpiresDefault指令是设定预设的过期时间.
</IfModule>
注:“access plus 10 days”指浏览时起算10天。
依照Apache官方说明文件,过期起算时间有三种,分别是access、now 以及modification。
其中access与now意义相同,而modification指的是网页文件的”最后编辑时间”。
所以如果要以档案的最后编辑时间起算,可以写成这样,”modification plus 10 days”。
而时间的指定也很简单,就是英文单字(years、months、weeks、days、hours、minutes、seconds)。
例 如,可以写成这样,”access plus 1 month 15 days 2 hours”。
九、Apache网站压缩
9.1 网站压缩
公网IP速率是极其珍贵的,网站压缩就是满足低带宽下高并发的最佳解决方案。
编辑apache主配置文件,在配置文件末尾添加如下代码:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
# Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #不可以对后缀gif,jpg,jpeg,png的文件压缩
Header append Vary User-Agent
</IfModule>
可以用站长工具查询你的网址,查看网站压缩率
至此,Apache简单配置与服务优化就完成啦!
https://blog.csdn.net/ordream/article/details/90262348
https://www.cnblogs.com/52linux/archive/2012/03/24/2415637.html
https://www.cnblogs.com/super-zhangkun/p/11232686.html
https://www.cnblogs.com/bigben0123/p/11269057.html
https://www.cnblogs.com/fsjohnhuang/p/3997211.html
https://www.cnblogs.com/jianqingwang/p/6054130.html
https://www.idaobin.com/archives/625.html