CentOS8之后,CentOS改变了发行策略,作为Fedora和RedHat之间的一个版本进行发布。本次建站,我直接选择了CentOS Stream 9作为宿主机操作系统,一来可以保证操作习惯的一致性,另外也是选择了CentOS的稳定性和可靠性。目前网上搜索了很多LAMP的配置教程,大部分是基于CentOS6,CentTOS7和CentOS8等比较老的版本,对应的PHP及Mariadb/MySQL都是相对比较老的版本,安装和配置都有所区别。这次在CentOS Stream 9 上部署Apache + PHP + Mariadb有遇到了不少问题,因此整理出来,供其他有需要的同学参考。
CentOS Stream 9当前支持使用dnf安装软件包,而且Fedora也默认使用dnf作为包管理器了,因此本文中统一使用dnf安装软件包。
1 安装和配置Apache
1.1 安装Aapache
使用root用户,通过如下几个命令安装和启动apache,如果是非root用户,在命令前添加sudo,提升权限。
# 安装apache服务 dnf install httpd # 启动apache服务 service httpd start # 设置开机启动apache服务 systemctl enable httpd
1.2 配置Apache
CentOS Stream9下,apache的配置文件位于/etc/httpd目录下,如果需要调整配置,只需要修改对应目录下的配置文件即可。
drwxr-xr-x 4 root root 50 Oct 4 09:32 cert drwxr-xr-x 2 root root 59 Oct 4 08:50 conf drwxr-xr-x 2 root root 188 Oct 4 09:37 conf.d drwxr-xr-x 2 root root 267 Oct 4 08:47 conf.modules.d lrwxrwxrwx 1 root root 19 Jul 22 19:42 logs -> ../../var/log/httpd lrwxrwxrwx 1 root root 29 Jul 22 19:42 modules -> ../../usr/lib64/httpd/modules lrwxrwxrwx 1 root root 10 Jul 22 19:42 run -> /run/httpd lrwxrwxrwx 1 root root 19 Jul 22 19:42 state -> ../../var/lib/httpd
conf目录存储apache的默认配置文件;
conf.d目录存储除默认外的其他配置文件,例如网站是php的,就则必须将该目录下的php.conf文件加载进来;
conf.modules.d目录存储apache的一些模块,例如ssl_mod.so等模块文件就在该目录下。
1.2.1 Apache HTTP配置
- 启用php服务:
其他文件保持不变,进入/etc/httpd/conf目录,打开httpd.conf文件,修改配置文件最后一行,加载conf.d中的配置文件(php.conf文件包含在此文件夹中,此处可以通过*通配符全部加载,也可指定文件名进行精确加载);
# Load config files in the "/etc/httpd/conf.d" directory, if any. IncludeOptional conf.d/*.conf
- 配置virtualhost
- 进入/etc/httpd/conf.d文件,建议每个站点独立创建一个文件,文件名可以按照域名的方式创建,如com.conf,方便后续修改配置文件
- 编辑virtualhost文件,指定域名和其他目录等信息
<VirtualHost *:80> ServerAdmin gallanthunter@163.com ServerName chahuawu.com ServerAlias www.chahuawu.com DocumentRoot /var/www/html/chahuawu.com <Directory /var/www/html/chahuawu.com > Options FollowSymLinks Order deny,allow Allow from all DirectoryIndex index.php index.html </Directory> ErrorLog /var/www/html/chahuawu.com/log/error.log CustomLog /var/www/html/chahuawu.com/log/requests.log combined </VirtualHost>
- 修改/var/www/html目录的权限
sudo chown -R apache:apache html sudo chmod -R 755 html
注意:CentOS Stream 9默认的用户和用户组和apache,如果在httpd.conf文件中修改为其他用户和用户组,则此处需要相应的修改,否则可能会因为权限的问题,导致读写文件失败。
- 重启apache服务
service httpd restart
此时通过已经解析好的域名,就可以正常访问网站了。如果虚拟主机目录下没有文件,则apache会默认使用welcome.conf中指定的文件。
1.2.2 Apache HTTPS配置
默认情况下,apache只是监听80端口,virtualhost配置完后,通过http就可以访问站点了,如果要通过https访问的话,则需要配置证书。关于证书,一般云厂商都提供了免费的证书使用,不差钱的话,可申请付费证书。证书的申请可参考各大厂商的产品文档操作即可,此处默认为证书已申请,可以直接使用。
- 安装ssl模块
默认情况下,CentOS Stream9并没有安装SSL模块,需要手工安装,命令如下:
dnf install ssl
安装完成后,在modules文件夹下即可看到mod_ ssl.so文件,此外在conf.d目录下,也可以看到ssl.conf文件。
在httpd目录下新建cert的目录,用于存放证书,建议证书目录也按照域名的方式新建目录存放,如cert/chahuawu.com。签名后的证书建议修改证明名称,按照域名的方式重命名。证书文件类型如下:
- 证书文件:以.crt为后缀或文件类型。
- 证书链文件:以.crt为后缀或文件类型。
- 密钥文件:以.key为后缀或文件类型。
- 修改virtualhost配置,以支持https访问
新建80to443.conf文件,添加如下内容,所有80端口的访问全部重定向至443端口
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
修改原virtualhost配置,参考如下:
<VirtualHost *:443>
ServerAdmin gallanthunter@163.com
ServerName chahuawu.com
ServerAlias www.chahuawu.com
DocumentRoot /var/www/html/chahuawu.com
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
SSLCertificateFile /etc/httpd/cert/chahuawu.com_public.crt
SSLCertificateKeyFile /etc/httpd/cert/chahuawu.com.key
SSLCertificateChainFile /etc/httpd/cert/chahuawu.com_chain.crt
<Directory /var/www/html/chahuawu.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php index.html
</Directory>
ErrorLog /var/www/html/chahuawu.com/log/error.log
CustomLog /var/www/html/chahuawu.com/log/requests.log combined
</VirtualHost>
重启Apache服务器使SSL配置生效
service httpd restart
2 安装和配置PHP
2.1 安装php
CentOS stream9默认安装php8.0,执行如下命令安装和启动PHP,同时设置开机启动php
dnf install php php-server
dnf install php-mysqlnd php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
service php-fpm start
systemctl enable php-fpm
2.2 配置PHP
安装PHP完php后,如果你建站程序使用的是Joomla,则需要php.ini文件中如下几个参数,且保证最小取值如下:
memory_limit: 256M upload_max_filesize: 32M post_max_size: 32M max_execution_time: 30
在以上参数的配置下,大部分扩展和请求都可以处理,但是如果有其他扩展超过上述参数的话,需要按照需要调整。
如果有其他要求,则按照对应程序的说明,调整相关参数即可。
修改参数后重启php-fpm服务即可。如果访问页面php没有被解析,请排查apache配置中,是否加载conf.d目录中的php.conf文件。
3 安装数据库
3.1 安装Mariadb
CentOS Stream 9默认已经安装了Mariadb,如果要重新安装,使用下面的命令重装,启动Mariadb服务,并设置开机启动:
dnf install mariadb mariadb-server service mariadb start systemctl enable mariadb
3.2 配置Mariadb数据库
使用root权限,首次安装后需要配置mariadb数据库
Enter current password for root (enter for none): # 输入数据库超级管理员root的密码(注意不是系统root的密码),第一次进入还没有设置密码则直接回车 Set root password? [Y/n] # 设置密码,y New password: # 新密码 Re-enter new password: # 再次输入密码 Remove anonymous users? [Y/n] # 移除匿名用户, y Disallow root login remotely? [Y/n] # 拒绝root远程登录,n,不管y/n,都会拒绝root远程登录 Remove test database and access to it? [Y/n] # 删除test数据库,y:删除。n:不删除,数据库中会有一个test数据库,一般不需要 Reload privilege tables now? [Y/n] # 重新加载权限表,y
配置数据库远程链接权限
mysql -u root -p ## 授予权限 grant all on *.* to "root"@"%" identified by "你的root账户密码"; ## 刷新权限 FLUSH PRIVILEGES; ## 查询 show grants for "root"@"%";
4 常见问题:
1)配置apache后,php文件无法解析
确认apache httpd.conf文件是否加载php.conf文件,如果没有,修改配置文件重启httpd服务
2) An error has occurred while processing your request.
确认站点目录用户和用户组是否通apache的配置一致,若不一致,通过chown命令,修改为一样的用户和用户组
3) 通过Navicat访问数据库,若出现权限异常的问题,请重新执行分配权限的命令
使用root登录数据库,重新执行以下命令:
grant all on *.* to "root"@"%" identified by "你的root账户密码";