在 Gentoo Linux 中创建虚拟主机、生成 SSL 证书和密钥并启用 CGI 网关
上一篇关于在 Gentoo Linux 中安装 LAMP 的教程仅介绍了基本安装过程,没有其他设置可供 Apache 更好地控制您的域。
本教程与 Gentoo LAMP 上的教程严格相关,并讨论 LAMP 环境的额外设置,例如在 Apache 上创建虚拟主机、生成 >SSL 证书文件和密钥,在 HTTP 事务上启用安全 SSL 协议并使用 Apache CGI 网关,以便您可以运行 Perl 或您网站上的 Bash 脚本。
要求
- 在 Gentoo Linux 中安装 LAMP
第 1 步:创建 Apache 虚拟主机
本主题使用假域名 - gentoo.lan - 通过本地主机文件启用,网站文件由 /var/www/gentoo.lan 提供 - DocumentRoot 指令,没有有效的 DNS 记录,演示如何使用 Apache Web 服务器在 Gentoo 上启用多个虚拟主机。
1. 首先,打开 Gentoo 主机文件进行编辑并添加包含您的域名的新行。
sudo nano /etc/hosts
在文件末尾使其看起来与此类似。
127.0.0.1 localhost gentoo
192.168.1.13 gentoo.lan
2. 使用 ping 命令测试您的假域名,该域名应使用其 IP 地址进行响应。
ping -c2 gentoo.lan
3. 激活 Apache 虚拟主机的过程非常简单。只需打开位于 /etc/apache2/vhosts.d/ 路径上的 Apache 默认虚拟主机文件,并在最后一个 语句之前,输入 下包含的新虚拟主机定义 … 指令。 C
包含您的自定义设置,例如 ServerName 和 DocumentRoot 路径。使用以下文件模板作为新虚拟主机的指南,并将其包含在 00_default_vhost.conf 文件中(适用于非 SSL 网站)。
sudo nano /etc/apache2/vhosts.d/00_default_vhost.conf
## Another Virtual hosts statemes ending in </VirtualHost> ###
<VirtualHost *:80>
ServerName gentoo.lan
DocumentRoot "/var/www/gentoo.lan"
<Directory "/var/www/gentoo.lan"
Options Indexes FollowSymLinks ExecCGI MultiViews
# AllowOverride controls what directives may be placed in .htaccess files.
AllowOverride All
# Controls who can get stuff from this server file
Order allow,deny
Allow from all
</Directory>
<IfModule mpm_peruser_module>
ServerEnvironment apache apache
</IfModule>
</VirtualHost>
## Another Virtual hosts statemes ###
## LAST STATEMENT which closes virtual hosts file ##
</IfDefine>
正如您通过可视化此文件内容所看到的,该文件具有高度注释和解释,并且还保留 localhost 虚拟主机定义 - 您可以将其用作指南。
4. 使用自定义虚拟主机完成文件编辑后,重新启动 Apache 以应用设置并确保创建 DocumentRoot 目录,以防您更改了此指令且路径不存在默认情况下不存在(在本例中更改为 /var/www/gentoo.lan)。我还创建了一个小的 PHP 文件来测试网络服务器配置。
sudo mkdir /var/www/gentoo.lan
su "echo '<?php phpinfo(); ?>' > /var/www/gentoo.lan/info.php"
sudo /etc/init.d/apache2 restart
5.要验证它,请打开浏览器并将其指向您的虚拟域名http://gentoo.lan/info.php。
使用此过程,您可以使用 Apache 虚拟主机添加任意数量的非 SSL 网站,但对于真正的面向 Internet 的计算机,请确保您已注册域并使用有效的 DNS 服务器记录。
要删除虚拟主机,只需注释掉或删除 00_default_vhost.conf 文件中 … 下包含的指令即可。
步骤 2:为虚拟主机生成 SSL 证书和密钥
SSL 是一种加密协议,用于使用证书和对称/非对称密钥通过互联网或内部网络中的安全通信通道交换信息。
6. 要简化证书和密钥生成过程,请使用以下 Bash 脚本,该脚本充当命令并使用 SSL 域名设置自动创建您需要的所有内容。
首先使用以下命令创建 Bash 脚本。
sudo nano /usr/local/bin/apache_gen_ssl
添加以下文件内容。
#!/bin/bash
mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
echo -e "Enter a name for this certificate:\nEx: mydomain.lan"
read cert
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt
echo -e " The certificate $cert has been generated!\nPlease link it to Apache SSL website!"
ls -all /etc/apache2/ssl/
exit 0
7. 文件创建后,为其附加执行权限并运行它以生成 SSL 密钥和证书。
sudo chmod +x /usr/local/bin/apache_gen_ssl
sudo apache_gen_ssl
当您第一次运行它时,会要求您输入您的域名名称。输入您为其生成 SSL 设置的域名名称,并使用所需信息填写证书,其中最重要的一个是通用名称,使用您的服务器 FQDN。
使用此方法托管所有证书和密钥的默认位置是 /etc/apache2/ssl/。
8. 现在是时候创建 gentoo.lan 虚拟主机 SSL 等效项了。使用与非 SSL 虚拟主机相同的方法,但这次编辑 /etc/apache2/vhosts.d/00_default_ssl_vhosts.conf 文件并稍作更改。
首先打开文件进行编辑并进行以下更改。
sudo nano /etc/apache2/vhosts.d/00_default_ssl_vhosts.conf
在 Listen 443 指令下添加以下内容。
NameVirtualHost *:443
使用以下模板创建新的虚拟主机并附加新的 SSL 证书 + 密钥路径和名称。
## Another Virtual hosts statemes ending in </VirtualHost> ###
<VirtualHost *:443>
ServerName gentoo.lan
DocumentRoot "/var/www/gentoo.lan"
ErrorLog /var/log/apache2/gentoo.lan-ssl_error_log
<IfModule log_config_module>
TransferLog /var/log/apache2/gentoo.lan-ssl_access_log
</IfModule>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
## Edit with new generated SSL certificate and key and change path to /etc/apache2/ssl/
SSLCertificateFile /etc/apache2/ssl/gentoo.lan.crt
SSLCertificateKeyFile /etc/apache2/ssl/gentoo.lan.key
<Directory "/var/www/gentoo.lan">
Options Indexes FollowSymLinks ExecCGI MultiViews Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/gentoo.lan ">
SSLOptions +StdEnvVars
</Directory>
<IfModule setenvif_module>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</IfModule>
<IfModule log_config_module>
CustomLog /var/log/apache2/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</IfModule>
</VirtualHost>
## Another Virtual hosts statements ###
虚拟主机定义必须在最后三个语句之前结束。
</IfModule>
</IfDefine>
</IfDefine>
9.完成虚拟主机文件的编辑后,重新启动Apache服务并使用HTTPS协议https://gentoo.lan将浏览器定向到您的域。
sudo /etc/init.d/apache2 restart
通过此过程,您可以使用 Apache 虚拟主机添加具有自己的证书和密钥的 SSL 网站。要删除 SSL 虚拟主机,请注释掉或删除 /etc/apache2/vhosts.d/00_default_ssl_vhosts.conf 文件中 … 下包含的指令。
步骤 3:启用 CGI 接口
CGI(通用网关接口)它允许 Apache 与外部程序交互,主要由 Perl 或 BASH 脚本组成,可以向您的网站添加动态内容。
10. 在启用 CGI 网关之前,请确保 Apache 已使用 Portage make.conf 文件上的 USE CGI 模块标记支持进行编译:cgi cgid 。要启用 Apache 的 GCI 支持,请打开 /etc/conf.d/apache2 文件并在 APACHE2_OPTS 行上附加 CGI 模块。
sudo nano /etc/conf.d/apache2
确保该行具有相似的内容。
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D STATUS -D CGI"
11.启用CGI模块后,打开您要启用CGI接口的网站定义主机,并在虚拟主机指令中添加以下内容。
<Directory "/var/www/gentoo.lan">
Options Indexes +ExecCGI MultiViews
AddHandler cgi-script .cgi .pl
DirectoryIndex index.cgi index.php index.html index.pl
AllowOverride All
Order allow,deny
Allow from all
</Directory>
12. 如果您的 DocumentRoot (/var/www/gentoo.lan/) 路径中有一个保存 CGI 脚本的目录,您可以仅启用该目录来提供动态 Perl或 Bash 脚本。
ScriptAlias /cgi-bin/ /var/www/gentoo.lan/cgi-bin/
<Location /cgi-bin>
Options +ExecCGI
AddHandler cgi-script .cgi .pl
DirectoryIndex index.cgi index.php index.html index.pl
</Location>
13. 对于 SSI(服务器端包含),在 Options 上附加 +Includes 语句并添加 .shtml 文件扩展名。
<Directory "/var/www/gentoo.lan">
Options Indexes +ExecCGI +Includes
AddHandler cgi-script .cgi .pl
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
DirectoryIndex index.shtml index.cgi index.pl index.php index.html
AllowOverride All
Order allow,deny
Allow from all
</Directory>
14. 要在 Apache CGI 网关上测试一些简单的 .cgi 和 .pl 脚本,请在虚拟主机 DocumentRoot 中创建以下脚本 ( /var/www/gentoo.lan/)。
Perl脚本
sudo nano /var/www/gentoo.lan/env.pl
添加以下 Perl 内容。
#!/usr/bin/perl
print "Content-type: text/html\n\n"; foreach my $keys (sort keys %ENV) { print "$keys =
$ENV{$keys}<br/>\n";
}
bash脚本
sudo nano /var/www/gentoo.lan/run.cgi
添加以下 Bash 内容。
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "---------------------------------------------------------------------------------"
./env.pl
echo "---------------------------------------------------------------------------------"
15. 文件创建后,使其可执行,重新启动 Apache 守护程序并将浏览器指向以下 URL。
sudo chmod +x /var/www/gentoo.lan/run.cgi
sudo chmod +x /var/www/gentoo.lan/env.pl
sudo /etc/init.d/apache2 restart
https://gentoo.lan/run.cgi
OR
https://gentoo.lan/env.pl
现在,您可以将 Gentoo 转变为强大的 Web 托管平台,并可针对系统性能进行微调设置并最大限度地控制整个环境。