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简单配置与服务优化就完成啦!

本文内容参考:
http://www.zhouqishan.cn/2017/04/11/apache%e7%a6%81%e7%94%a8%e6%b5%8b%e8%af%95%e9%a1%b5%ef%bc%88%e9%bb%98%e8%ae%a4%e9%a1%b5%ef%bc%89/

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deng_Xian_Sheng

捐助1元钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值