安装配置 WWW 服务, LAMP : Linux + Apache + Mariadb + PHP
#安装三大组件,注意设置相关 USE
root # emerge -av apache mariadb php
#编辑相关配置文档
# /etc/apache2/httpd.conf (可保持默认不配置)
# /etc/conf.d/apache2 需配置 "APACHE2_OPTS" 增加 "-D PHP -D STATUS"
# /etc/apache2/modules.d/00_default_settings.conf (可保持默认不配置)
# /etc/apache2/vhosts.d/default_vhost.include (可保持默认不配置), 可配置 "DocumentRoot", "Options Indexes" 可查看目录
# /etc/apache2/vhosts.d/00_default_vhost.conf (可保持默认不配置), 可配置 "Listen 80"
# /etc/apache2/modules.d/70_mod_php.conf (可保持默认不配置)
# /etc/mysql/my.cnf (可保持默认不配置)
# /etc/php/apache2-php7.x/php.ini (可保持默认不配置), 可配置 "ignore_repeated_errors", "ignore_repeated_source", "default_charset", "date.timezone"等
#测试配置档语法
root # /etc/init.d/apache2 configtest
#systemd:
root # apache2ctl configtest
#启动httpd/apache2服务
root # /etc/init.d/apache2 start
#systemd:
root # systemctl start apache2
#设置服务开机启动
root # rc-update add apache2 default
#systemd:
root # systemctl enable apache2
#创建数据库,设置适当的权限,并创建根密码,输入命令后根据提示输入密码即可
root # emerge --config dev-db/mariadb
#启动 mariadb 服务
root # /etc/init.d/mysql start
#systemd:
root # systemctl start mariadb.service
#设置服务开机启动,平时使用WWW服务用不上数据库时,可不设置开机启动
root # rc-update add mysql default
#systemd:
root # systemctl enable mariadb.service
#进入数据库管理
root # mysql -u root -p
#新建用户
MariaDB [(none)]> CREATE USER 'xxx'@'localhost' IDENTIFIED BY 'xxx';
#赋予 xxxx的 完全操作权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON xxx.* TO 'xxx'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
#创建数据库
MariaDB [(none)]> CREATE DATABASE xxxxxxx;
#创建UFT8编码的数据库
MariaDB [(none)]> CREATE DATABASE xxxxxx CHARACTER SET = utf8 COLLATE = utf8_general_ci;
#查看数据库
MariaDB [(none)]> show databases;
#删除数据库
MariaDB [(none)]> drop database xxxxxx;
#查看sql_mode
MariaDB [(none)]> select @@global.sql_mode;
MariaDB [(none)]> SELECT @@SESSION.sql_mode;
#设置sql_mode
MariaDB [(none)]> SET GLOBAL sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
#gentoo 中我没使用SElinux, 以下操作是在redhet系中的操作
#判断是否是SElinux问题,先用 getenforce 查看,再用 setenforce 0 先关闭 SElinux, 测试问题是否已经解决
root # sestatus
root # getenforce
root # setenforce 0
root # setenforce 1
#如果是SElinux问题,查看/var/log/messages中的信息查找解决方案,如果SElinux错误信息没有写入 /var/log/messages,请先安装setroubleshoot
root # grep -r sealert /var/log/messages*
root # sealert -l xxxxxxx-xxxxxx-xxxxxxx-xxxxxx-xxxxxx
#在SElinux 打开的情况下,php无法写文件,解决:
root # semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/count.txt"
#或者
root # semanage fcontext -a -t public_content_rw_t "/var/www/html/count.txt"
root # restorecon -v /var/www/html/count.txt
root # ls -Z /var/www/html/count.txt
root # setsebool -P allow_httpd_anon_write 1
root # systemctl restart httpd.service
#建立一把给 Apache 使用的私钥档案,输入4位以上密码
root # cd /etc/ssl/apache2
root # openssl genrsa -aes128 2048 > tim.key
#将刚刚建立的档案里面的密码取消掉
root # mv tim.key tim.key.raw
root # openssl rsa -in tim.key.raw -out tim.key
root # rm tim.key.raw
root # chmod 400 tim.key
#建立所需要的最终凭证档,注意多加一個序号 (SERIAL) 的参数,避免多次制作密钥产生错误,以下命令建立凭证档时会询问配置相关信息,例如: CA, ONTARIO, TORONTO, TIM GROUP, TIM Science Technology, tiimmm.com, tim@tiimmm.com
root # openssl req -utf8 -new -key tim.key -x509 -days 3650 -out tim.crt -set_serial 20180101
#修改00_default_ssl_vhost.conf的內容,使用自制凭证
root # vim /etc/apache2/vhosts.d/00_default_ssl_vhost.conf
root # /etc/init.d/apache2 restart
#systemd:
root # systemctl restart apache2
file /etc/apache2/vhosts.d/00_default_ssl_vhost.conf
#使用自制凭证
SSLCertificateFile /etc/ssl/apache2/tim.crt
SSLCertificateKeyFile /etc/ssl/apache2/tim.key
#此操作在oraclelinux7中测试, 安装 acme.sh
root # curl https://get.acme.sh | sh -s email=my@example.com
# 生成证书
root # acme.sh --issue -d example.com --apache
# 安装证书
root # mkdir /etc/httpd/sslcert
root # acme.sh --install-cert -d example.com --cert-file /etc/httpd/sslcert/cert.pem --key-file /etc/httpd/sslcert/key.pem --fullchain-file /etc/httpd/sslcert/fullchain.pem --reloadcmd "service httpd force-reload"
#此操作在oraclelinux7中测试, 安装 SSL 模块
root # yum install mod_ssl
#确保/etc/httpd/conf/httpd.conf 有引入SSL相关配置文件: Include conf.modules.d/*.conf, IncludeOptional conf.d/*.conf
#确保有打开 SSL 模块, /etc/httpd/conf.modules.d/00-ssl.conf: LoadModule ssl_module modules/mod_ssl.so
#修改 SSL 配置文件
root # vim /etc/httpd/conf.d/ssl.conf
#重启服务
root # systemctl restart httpd.service
file /etc/httpd/conf.d/ssl.conf
#监听端口
Listen 443 https
#网站目录
DocumentRoot "/var/www/html"
#域名地址
ServerName https://tiimmm.com
#SSL证书配置
SSLCertificateFile /etc/httpd/sslcert/cert.pem
SSLCertificateKeyFile /etc/httpd/sslcert/key.pem
SSLCertificateChainFile /etc/httpd/sslcert/fullchain.pem
# 此操作在oraclelinux7中测试
# 方法1: Virtual Hosts 方式
# 创建 /etc/httpd/conf.d/non-ssl.conf 配置 VirtualHost *:80
root # vim /etc/httpd/conf.d/non-ssl.conf
# 方法2: mod_rewrite/.htaccess 方式
# 确保有打开 rewrite 模块,/etc/httpd/conf.modules.d/00-base.conf: LoadModule rewrite_module modules/mod_rewrite.so
# 修改 /etc/httpd/conf/httpd.conf 文件里的 <Directory "/var/www/html"> 下的 "AllowOverride None" 为 "AllowOverride All"
# 创建文件.htaccess
root # vim /var/www/html/.htaccess
#重启服务
root # systemctl restart httpd.service
file /etc/httpd/conf.d/non-ssl.conf
#配置 VirtualHost *:80
<VirtualHost *:80>
ServerName tiimmm.com
Redirect / https://tiimmm.com/
</VirtualHost>
file /var/www/html/.htaccess
#配置强制跳转
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
本文作者是一位开源理念的坚定支持者,所以本文内容遵照开源的精神发布。
无担保:本文作者不保证此文内容准确无误,亦不承担任何由于使用此文档所导致的损失。
自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。
名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留作者署名并注明出处。
其他作品
本文作者十分愿意与他人分享劳动成果,如果你对我的其他作品有兴趣,可以在如下位置查看现有的作品集:
Tim 作品集 [ https://tiimmm.com/ ]
联系方式
由于作者水平有限,因此不能保证此文内容准确无误。如果你发现了此文中的错误(哪怕是错别字也好),请来信指出,任何提高此文质量的建议我都将虚心接纳。
Email: tiimmm dot chen at gmail dot com
网站制作者:Author:tiimmm dot chen at gmail dot com, Welcome to email for discussion!