在 Gentoo Linux 中创建虚拟主机、生成 SSL 证书和密钥并启用 CGI 网关
上一篇关于在 Gentoo Linux 中安装 LAMP 的教程仅介绍了基本的安装过程,没有提供额外的设置以便 Apache 更好地控制您的域。
本教程与Gentoo LAMP上的前一个教程紧密相关,并讨论了LAMP环境的额外设置,例如在 Apache 上创建虚拟主机、生成SSL证书文件和密钥、在 HTTP 事务上启用安全SSL协议以及使用 Apache CGI 网关,以便您可以在您的网站上运行Perl或Bash脚本。
要求
步骤1:创建Apache虚拟主机
本主题使用一个通过本地 hosts 文件启用的虚假域名 – gentoo.lan ,网站文件由/var/www/gentoo.lan – DocumentRoot指令提供,没有有效的DNS记录,以演示如何使用 Apache Web 服务器在 Gentoo 上启用多个虚拟主机。
1.首先,打开 Gentoo hosts 文件进行编辑,并添加一个包含您的域名的新行。
$ 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 文件来测试 Web 服务器配置。
$ 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(服务器端包含),在选项上附加+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 托管平台,并对您的系统性能进行微调设置,并对整个环境进行最大程度的控制。