网站搜索

在 Gentoo Linux 中创建虚拟主机、生成 SSL 证书和密钥并启用 CGI 网关


上一篇关于在 Gentoo Linux 中安装 LAMP 的教程仅介绍了基本安装过程,没有其他设置可供 Apache 更好地控制您的域。

本教程与 Gentoo LAMP 上的教程严格相关,并讨论 LAMP 环境的额外设置,例如在 Apache 上创建虚拟主机、生成 >SSL 证书文件和密钥,在 HTTP 事务上启用安全 SSL 协议并使用 Apache CGI 网关,以便您可以运行 Perl 或您网站上的 Bash 脚本。

要求

  1. 在 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

包含您的自定义设置,例如 ServerNameDocumentRoot 路径。使用以下文件模板作为新虚拟主机的指南,并将其包含在 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 托管平台,并可针对系统性能进行微调设置并最大限度地控制整个环境。