AlmaLinux系统下Apache 2.4带SSL的虚拟主机配置咨询
AlmaLinux系统下Apache 2.4带SSL的虚拟主机配置咨询
嘿,看你已经把AlmaLinux上的Apache基础环境搭得有模有样了——装了httpd、开了Firewalld的80/443端口,httpd.conf的基础配置也填了不少内容。我来帮你梳理下带SSL的虚拟主机配置,顺便给现有配置把把脉:
一、先把SSL模块和证书搞定
- 首先确保SSL模块装好了:在AlmaLinux上,直接跑
sudo dnf install mod_ssl就行,安装后Apache会自动加载这个模块(你可以去/etc/httpd/conf.modules.d/00-ssl.conf里确认下有没有LoadModule ssl_module modules/mod_ssl.so这行) - 接下来弄SSL证书:如果是测试用,自签证书就够了,执行这条命令(记得把域名换成你的):
执行的时候会让你填一堆信息,其中Common Name一定要填sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/vps.mydomain.com.key -out /etc/pki/tls/certs/vps.mydomain.com.crtvps.mydomain.com,其他的可以随便填。要是生产环境用,建议用免费的Let's Encrypt证书,不过这里先讲自签的配置流程。
二、配置虚拟主机文件
Apache在AlmaLinux上的虚拟主机配置一般放在/etc/httpd/conf.d/目录下,别把所有内容都堆在httpd.conf里,分开管理后期改起来更省心。新建一个mydomain.conf文件,内容分两部分:
1. HTTP(80端口)重定向到HTTPS
把所有HTTP请求都转到HTTPS,既安全又规范:
<VirtualHost *:80> ServerAdmin admin@mydomain.com ServerName vps.mydomain.com # 永久重定向到HTTPS Redirect permanent / https://vps.mydomain.com/ </VirtualHost>
2. HTTPS(443端口)虚拟主机核心配置
这部分把你原有的目录规则整合进来,加上SSL相关配置:
<VirtualHost *:443> ServerAdmin admin@mydomain.com ServerName vps.mydomain.com DocumentRoot "/home/mydomain/public_html" # SSL核心配置,对应刚才生成的证书和密钥 SSLEngine on SSLCertificateFile /etc/pki/tls/certs/vps.mydomain.com.crt SSLCertificateKeyFile /etc/pki/tls/private/vps.mydomain.com.key # 以下是你原配置里的目录规则,直接搬过来就行 <Directory "/home/mydomain/public_html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> <Directory "/home/mydomain/public_html/cgi-bin"> AllowOverride none Require all granted Options +ExecCGI AddHandler cgi-script .cgi Require method GET OPTIONS </Directory> # 补全你没写完的DirectoryIndex,比如指定默认首页文件 <IfModule dir_module> DirectoryIndex index.html index.php index.cgi </IfModule> </VirtualHost>
三、调整现有httpd.conf的小建议
- 把全局配置和虚拟主机配置分开:httpd.conf里保留
ServerRoot、Listen、User/Group这些全局项就行,虚拟主机的内容都放到/etc/httpd/conf.d/下的文件,后期维护的时候不用翻大文件找内容 - 你原配置里的
<Directory /var/www>如果没用的话可以注释掉,留着也不影响,但会少点冗余内容
四、配置后检查与重启
- 先检查配置语法,避免写错导致Apache启不来:
sudo apachectl configtest,如果输出Syntax OK就没问题 - 重启Apache让配置生效:
sudo systemctl restart httpd - 顺便把Apache设为开机自启,避免VPS重启后服务掉了:
sudo systemctl enable httpd
五、容易踩坑的细节
- 防火墙再核实:虽然你说开了80和443,但再确认下:
sudo firewall-cmd --list-all,如果没看到http和https服务,就执行这几条命令加上:sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --reload - SELinux坑:AlmaLinux默认SELinux是强制模式,这玩意儿很容易导致403错误,得做这些调整:
- 给网站目录设置正确的SELinux上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/home/mydomain/public_html(/.*)?" restorecon -Rv /home/mydomain/public_html - CGI脚本的上下文也要设置:
sudo semanage fcontext -a -t httpd_sys_script_exec_t "/home/mydomain/public_html/cgi-bin(/.*)?" restorecon -Rv /home/mydomain/public_html/cgi-bin - 允许Apache访问用户家目录:
sudo setsebool -P httpd_enable_homedirs on
- 给网站目录设置正确的SELinux上下文:
备注:内容来源于stack exchange,提问作者Xerix
相关产品推荐
相关产品推荐

