CentOS 7 系统配置Apache

现在公司的项目由于一直是一个外包团队在维护,一直运行在Windows Server上,我接手之后从长远考虑以及熟练及安全、性能等方面考虑,我最终决定换成Linux,而由于运行的是公司的正式项目,毫无疑问选择了CentOS,至于版本,我选择了最新的CentOS7。而服务器本打算是用流行的Nginx的,但是几个CGI参数始终无法配置好,出于稳定性考虑,最后选择了Apache。

安装基本软件包

由于CentOS 7 自带的PHP版本才5.4,不能满足我们开发的程序的要求,本着能包管理器安装就不编译安装的原则,选择了webstatic这个源的包,更新系统:

yum update

安装EPEL源:

yum install epel-release

安装webstatic源:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装Apache、安装PHP及Mariadb数据库命令如下:

yum install httpd php56w php56w-mysql php56w-pdo php56w-gd php56w-mcrypt php56w-mbstring php56w-json php56w-xml php56w-openssl mariadb-server -y

对,你没看错,CentOS下的Apache在包管理器中的名字就是httpd。这样就安装好了各个所需要的组件,接下来就是配置了。

Apache基本配置

yum 安装的apache,配置文件在 /etc/httpd/ ,我们需要改的各个配置文件都在这个目录下面。

首先,更改/etc/httpd/conf/httpd.conf中的ServerName字段,否则会提示AH00558字段:

[root@localhost ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK

接着,在/etc/httpd/conf.d/下面新建一个example.conf文件,这个就是我们需要的虚拟主机配置文件,如果只是想要HTTP服务,复制下面这段并进行相应修改即可:

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example/
ServerAlias example
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.log combined
<Directory /var/www/example>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride FileInfo Options
        Order allow,deny
        allow from all
</Directory>
Header unset X-Powered-By
</VirtualHost>

配置完成之后,用apache自带的工具检查是否有语法错误。

配置Apache提供HTTPS服务

但是由于现在的潮流是提供HTTPS服务,我们这个项目也给App端提供数据接口服务,按照苹果的要求以及处于安全性考虑,确实有必要上HTTPS服务,但是考虑到实际业务情况,我们现阶段不打算强制跳转到HTTPS访问,于是采用的是HTTP和HTTPS都可访问策略,这就要求要准备一份SSL证书了,申请证书这一步按下不表,很多途径都可以申请,我这里只记录下配置步骤。

要使用yum包管理器安装的Apache支持SSL,还需要安装一个Apache模块,命令如下:

yum install mod_ssl

然后是增加对应的SSL配置,在上面那个配置文件末尾增加或者新建一个配置文件都行,相应配置:

<VirtualHost *:443>
ServerName https://www.example.com
DocumentRoot /var/www/example/
ServerAlias example
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.log combined
<Directory /var/www/example>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride FileInfo Options
        Order allow,deny
        allow from all
</Directory>
SSLEngine on
SSLCertificateFile /var/www/example-ssl/xxx.pem
SSLCertificateKeyFile /var/www/example-ssl/xxx.key
</VirtualHost>

复制,更改对应的项即可。

然后再次检查一下语法是否有误:

httpd -t

如果没问题,可以重启httpd服务:

systemctl restart httpd

额外配置

上面有个配置项我这里记录一下,Header unset X-Powered-By这一行是让Apache隐藏对应的http header,处于安全考虑不允许后端暴露太多信息。

同样需要隐藏的还有Apache的版本号以及操作系统信息,在/etc/httpd/conf/httpd.conf文件末尾增加下面两行:

ServerTokens Prod
ServerSignature Off

最后再检查一下是否有语法错误,如果一切正常则可以重启Apache服务或者重新加载配置文件。

由于Apache是以apache用户组下的apache用户运行的,所以,对应的网站目录文件需要给予对应的权限才能使网站正常运行:

chown -R apache.apache /var/www/example

上面的文件路径改成对应的网站文件路径即可。