介绍
Apache和Nginx是经常与PHP一起使用的两个流行的开源web服务器。 当托管具有不同要求的多个网站时,在同一虚拟机上运行它们可能是有用的。 在单个系统上运行两个Web服务器的一般解决方案是使用多个IP地址或不同的端口号。
具有IPv4和IPv6地址的小队可以配置为在一个协议上为Apache站点服务,在另一个协议上为Nginx站点提供服务,但这不是目前可行的,因为ISP采用的IPv6仍然不广泛。 拥有像一个不同的端口号81
或8080
为第二个Web服务器是另一种解决方案,但与端口号分享的网址(例如http://example.com:81
)并不总是合理的或理想。
本教程将告诉你如何配置Nginx作为一个Web服务器和作为Apache的反向代理 - 所有在一个Droplet。 根据Web应用程序,可能需要进行代码更改以保持Apache反向代理感知,尤其是在配置SSL站点时。 为了避免这种情况,我们将这样看来Apache直接处理来自Web客户端请求安装Apache模块名为mod_rpaf其重写某些环境变量。
我们将在一个Droplet上托管四个域名。 :两个由Nginx的送达example.com
(默认的虚拟主机)和sample.org
。 剩下的两个, foobar.net
和test.io
,将被Apache服务。
先决条件
- 一个新的Ubuntu 16.04 Droplet。
- 以标准用户帐户
sudo
权限。 您可以通过以下的的第2步和3设置了一个标准帐户与Ubuntu 16.04初始服务器设置 。 - 所需的域名应指向DigitalOcean控制面板中的Droplet的IP地址。 见第3步如何建立一个主机名与DigitalOcean对于如何做到这一点的例子。 如果您在其他位置托管域的DNS,您应该在那里创建适当的A记录。
可选引用
本教程需要Apache和Nginx中虚拟主机的基本知识,以及SSL证书创建和配置。 有关这些主题的详细信息,请参阅以下文章。
第1步 - 安装Apache和PHP-FPM
除了Apache和PHP-FPM,我们还必须安装名为libapache2-mod-fastcgi的PHP FastCGI Apache模块。
首先,更新apt存储库以确保拥有最新的软件包。
sudo apt-get update
接下来,安装必要的软件包:
sudo apt-get install apache2 libapache2-mod-fastcgi php-fpm
接下来,让我们更改Apache的默认配置。
第2步 - 配置Apache和PHP-FPM
在这一步中,我们将Apache的端口号更改为8080,并使用mod_fastcgi模块将其配置为使用PHP-FPM。 编辑Apache配置文件并更改Apache的端口号。
sudo nano /etc/apache2/ports.conf
找到以下行:
Listen 80
将其更改为:
Listen 8080
保存并退出ports.conf
。
注:Web服务器通常设置为监听127.0.0.1:8080
配置反向代理,但是这样做会设置PHP的环境变量SERVER_ADDR到环回的IP地址,而不是服务器的公网IP的价值的时候。 我们的目标是设置Apache的方式,使其网站没有看到一个反向代理在它的前面。 因此,我们将其配置为监听8080
上的所有IP地址。
接下来,我们将编辑Apache的默认虚拟主机文件。 在<VirtualHost>
在此文件指令被设置为只服务于网站的端口80
,所以我们必须改变这一点。 打开默认虚拟主机文件。
sudo nano /etc/apache2/sites-available/000-default.conf
第一行应该是:
<VirtualHost *:80>
将其更改为:
<VirtualHost *:8080>
保存文件并重新加载Apache。
sudo systemctl reload apache2
验证Apache是目前监听8080
。
sudo netstat -tlpn
输出应该看起来像下面的例子,用的Apache2监听::: 8080。
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1086/sshd
tcp6 0 0 :::8080 :::* LISTEN 4678/apache2
tcp6 0 0 :::22 :::* LISTEN 1086/sshd
一旦验证Apache正在侦听正确的端口,您可以配置对PHP和FastCGI的支持。
第3步 - 配置Apache使用mod_fastcgi
Apache提供使用PHP页面mod_php
在默认情况下,但它需要额外的配置与PHP-FPM工作。
注意 :如果你想与mod_php的灯的现有安装本教程中,与第一禁用:
sudo a2dismod php7.0
我们将增加一个配置块mod_fastcgi
取决于mod_action
。 mod_action
默认是禁用的,所以我们首先需要启用它。
sudo a2enmod actions
这些配置指令传递的请求.php
文件到PHP-FPM UNIX套接字。
sudo nano /etc/apache2/mods-enabled/fastcgi.conf
添加内以下行<IfModule mod_fastcgi.c> . . . </IfModule>
<IfModule mod_fastcgi.c> . . . </IfModule>
<IfModule mod_fastcgi.c> . . . </IfModule>
块,低于该块中的现有项目:
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php-fcgi
Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php7.0-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
保存所做的修改fastcgi.conf
,做一个配置测试。
sudo apachectl -t
如果显示语法OK刷新Apache。 如果您看到警告Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message.
Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message.
,这很好。 它不影响我们现在。
sudo systemctl reload apache2
现在让我们确保我们可以从Apache提供PHP。
第4步 - 验证PHP功能
检查PHP可以通过创建phpinfo()
文件,并从Web浏览器访问它。
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
要看到在浏览器中的文件,去http:// your_ip_address :8080/info.php
。 这将给你一个PHP正在使用的配置设置的列表。
在页面的顶部,检查服务器API说FPM / FastCGI的 。 的方式在页面约三分之二,PHP的变量部分会告诉你SERVER_SOFTWARE就是Apache在Ubuntu。 这些确认mod_fastcgi
是积极和Apache使用PHP-FPM处理PHP文件。
第5步 - 为Apache创建虚拟主机
让我们来创建域的Apache虚拟主机文件foobar.net
和test.io
。 为此,我们首先为两个站点创建文档根目录,并在这些目录中放置一些默认文件,以便我们可以轻松地测试我们的配置。
首先,创建根目录:
sudo mkdir -v /var/www/{foobar.net,test.io}
然后创建一个index
为每个站点文件。
echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www/foobar.net/index.html
echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www/test.io/index.html
然后创建一个phpinfo()
为每个网站,所以我们可以测试PHP配置正确的文件。
echo "<?php phpinfo(); ?>" | sudo tee /var/www/foobar.net/info.php
echo "<?php phpinfo(); ?>" | sudo tee /var/www/test.io/info.php
现在创建的虚拟主机文件foobar.net
域。
sudo nano /etc/apache2/sites-available/foobar.net.conf
将以下指令放在此新文件中:
<VirtualHost *:8080>
ServerName foobar.net
ServerAlias www.foobar.net
DocumentRoot /var/www/foobar.net
<Directory /var/www/foobar.net>
AllowOverride All
</Directory>
</VirtualHost>
注: AllowOverride All
启用.htaccess
的支持。
这些只是最基本的指令。 有关在Apache中设置虚拟主机的完整指南,请参阅如何设置Apache在Ubuntu 16.04虚拟主机 。
保存并关闭文件。 然后创建一个类似的配置test.io
。
sudo nano /etc/apache2/sites-available/test.io.conf
<VirtualHost *:8080>
ServerName test.io
ServerAlias www.test.io
DocumentRoot /var/www/test.io
<Directory /var/www/test.io>
AllowOverride All
</Directory>
</VirtualHost>
现在,这两个Apache的虚拟主机都设置时,可使用网站a2ensite
命令。 这将创建一个符号链接到虚拟主机文件sites-enabled
目录。
sudo a2ensite foobar.net
sudo a2ensite test.io
再次检查Apache的配置错误。
sudo apachectl -t
如果显示语法OK刷新Apache。
sudo systemctl reload apache2
要确认网站正在努力,开放http:// foobar.net :8080
和http:// test.io :8080
在浏览器中,验证每个网站显示其index.html文件。
您应该会看到以下结果:
同时,检查PHP是通过访问info.php的文件,为每个站点的工作。 访问http:// foobar.net :8080/info.php
和http:// test.io :8080/info.php
在浏览器中。
你应该看到在每个站点相同的PHP配置规格列表,在第4步看到我们现在有在港举办Apache的两个网站8080
第6步 - 安装和配置Nginx
在这一步中,我们将安装的Nginx和配置域example.com
和sample.org
为Nginx的虚拟主机。 有关在Nginx的设置虚拟主机的完整指南,请参阅如何设置的Nginx服务器块(虚拟主机),在Ubuntu 16.04 。
使用软件包管理器安装Nginx。
sudo apt-get install nginx
然后删除默认的虚拟主机的符号链接,因为我们不会再使用它了。 我们将创造我们自己默认的站点后( example.com
)。
sudo rm /etc/nginx/sites-enabled/default
现在我们将使用我们用于Apache的相同过程为Nginx创建虚拟主机。 首先为这两个网站创建文档根目录:
sudo mkdir -v /usr/share/nginx/{example.com,sample.org}
当我们与Apache的虚拟主机一样,我们将再次创造index
和phpinfo()
的文件进行测试安装完成之后。
echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx/example.com/index.html
echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx/sample.org/index.html
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/example.com/info.php
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/sample.org/info.php
现在创建一个域的虚拟主机文件example.com
。
sudo nano /etc/nginx/sites-available/example.com
Nginx的调用server {. . .}
server {. . .}
server {. . .}
的配置文件的服务器的块区域。 创建主虚拟主机,example.com的服务器模块。 该default_server
配置指令使得它处理不匹配任何其他虚拟主机的HTTP请求这个默认的虚拟主机。
以下内容粘贴到example.com的文件中:
server {
listen 80 default_server;
root /usr/share/nginx/example.com;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include snippets/fastcgi-php.conf;
}
}
保存并关闭文件。 现在您可以创建的Nginx的第二个域名,虚拟主机文件sample.org
。
sudo nano /etc/nginx/sites-available/sample.org
对于sample.org服务器块应该是这样的:
server {
root /usr/share/nginx/sample.org;
index index.php index.html index.htm;
server_name sample.org www.sample.org;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include snippets/fastcgi-php.conf;
}
}
保存并关闭文件。 然后启用这两个站点通过创建符号链接sites-enabled
目录。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org
做一个Nginx配置测试:
sudo nginx -t
如果显示OK,然后重新装入Nginx的。
sudo systemctl reload nginx
现在acccess的phpinfo()
在Web浏览器访问您的Nginx虚拟主机文件http:// example.com /info.php
和http:// sample.org /info.php
。 再次查看PHP变量部分。
[“SERVER_SOFTWARE”]应该说nginx
,说明文件被直接Nginx的服务。[“DOCUMENT_ROOT”]应该指向在此步骤中的每个Nginx的网站先前创建的目录中。
在这一点上,我们已经安装了Nginx并创建了两个虚拟主机。 接下来,我们将配置Nginx来代理面向托管在Apache上的域的请求。
第7步 - 为Apache的虚拟主机配置Nginx
让我们创建了多个域名额外的Nginx虚拟主机server_name
指令。 对这些域名的请求将代理到Apache。
创建一个新的Nginx虚拟主机文件:
sudo nano /etc/nginx/sites-available/apache
添加下面的代码块。 它指定两个Apache虚拟主机域的名称,并将其请求代理给Apache。 请记住,在使用公共IP地址proxy_pass
。
server {
listen 80;
server_name foobar.net www.foobar.net test.io www.test.io;
location / {
proxy_pass http://your_server_ip:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
保存文件并通过创建符号链接启用此新虚拟主机。
sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache
做一个配置测试:
sudo nginx -t
如果显示OK刷新Nginx的。
sudo systemctl reload nginx
打开浏览器,访问URL http:// foobar.net /info.php
在浏览器中。 向下滚动到PHP变量部分,检查显示的值。
变量SERVER_SOFTWARE和DOCUMENT_ROOT确认此请求被Apache处理。 变量HTTP 点¯xREAL_IP和HTTP由x Nginx的添加FORWARDED_FOR,应该告诉你正在使用访问URL的计算机的公网IP地址。
我们成功地设置了Nginx来代理对Apache的特定域的请求。 接下来,让我们配置Apache设置REMOTE_ADDR
变量,如果它直接处理这些请求。
第8步 - 安装和配置mod_rpaf
在这一步中,我们将安装Apache模块名为mod_rpaf其重写REMOTE_ADDR,HTTPS和HTTP_PORT的基于反向代理所提供的数值的数值。 没有这个模块,一些PHP应用程序将需要代码更改从代理后无缝工作。 该模块是目前在Ubuntu的版本库libapache2-mod-rpaf
但已经过时,而且不支持某些配置指令。 相反,我们将从源代码安装它。
安装构建模块所需的软件包:
sudo apt-get install unzip build-essential apache2-dev
从GitHub下载最新的稳定版。
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
解压缩:
unzip stable.zip
切换到工作目录。
cd mod_rpaf-stable
然后编译和安装模块。
make
sudo make install
创建在一个文件mods-available
它加载rpaf模块目录。
sudo nano /etc/apache2/mods-available/rpaf.load
将以下行添加到文件:
LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so
在此目录中创建另一个文件。 这将包含配置指令。
sudo nano /etc/apache2/mods-available/rpaf.conf
添加以下代码块,确保添加您的Droplet的IP地址。
<IfModule mod_rpaf.c>
RPAF_Enable On
RPAF_Header X-Real-Ip
RPAF_ProxyIPs your_server_ip
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
</IfModule>
以下是每个指令的简要说明。 见mod_rpaf
README文件的详细信息。
- RPAF_Header -头用于客户端的真实IP地址。
- RPAF_ProxyIPs -代理IP来调整HTTP请求。
- RPAF_SetHostName -更新虚拟主机名称,以便服务器名和ServerAlias工作。
- RPAF_SetHTTPS -设置
HTTPS
基于包含在价值环境变量X-Forwarded-Proto
。 - RPAF_SetPort -设置
SERVER_PORT
环境变量。 当Apache在SSL代理之后时有用。
减rpaf.conf
并启用模块。
sudo a2enmod rpaf
这将创建文件的符号链接rpaf.load
和rpaf.conf
在mods-enabled
目录。 现在做一个配置测试。
sudo apachectl -t
刷新Apache如果返回语法确定 。
sudo systemctl reload apache2
访问Apache的网站“之一phpinfo()
在浏览器中的网页,并检查PHP变量部分。 该REMOTE_ADDR变量现在也可以是本地计算机的公网IP地址。
第9步 - 设置HTTPS网站(可选)
在此步骤中,我们将为在Apache上托管的域配置SSL证书。 Nginx支持SSL终止,所以我们可以设置SSL,而不修改Apache的配置文件。 该mod_rpaf
模块确保所需的环境变量在Apache设置,使应用程序无缝工作背后SSL反向代理。
为SSL证书及其私钥创建一个目录。
sudo mkdir /etc/nginx/ssl
对于本文,我们将使用有效期为10年的自签名SSL证书。 生成两个自签名证书foobar.net
和test.io
。
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/foobar.net-key.pem -out /etc/nginx/ssl/foobar.net-cert.pem -days 3650 -nodes
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/test.io-key.pem -out /etc/nginx/ssl/test.io-cert.pem -days 3650 -nodes
每次,将提示您输入证书标识详细信息。 输入的适当的域Common Name
各一次。
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Inc
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:foobar.net
Email Address []:
现在打开代理从Nginx到Apache的请求的Apache虚拟主机文件。
sudo nano /etc/nginx/sites-available/apache
由于我们对每个域单独的证书和密钥,我们需要有单独的server { . . . }
server { . . . }
server { . . . }
块各个领域。 您应该删除文件的当前内容,并将其替换为以下内容:
server {
listen 80;
listen 443 ssl;
server_name test.io www.test.io;
ssl on;
ssl_certificate /etc/nginx/ssl/test.io-cert.pem;
ssl_certificate_key /etc/nginx/ssl/test.io-key.pem;
location / {
proxy_pass http://your_server_ip:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
listen 443 ssl;
server_name foobar.net www.foobar.net;
ssl on;
ssl_certificate /etc/nginx/ssl/foobar.net-cert.pem;
ssl_certificate_key /etc/nginx/ssl/foobar.net-key.pem;
location / {
proxy_pass http://your_server_ip:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
我们将原始服务器块拆分为两个单独的块,我们还告诉Nginx监听端口443,安全网站的默认端口。
保存文件并执行配置测试。
sudo nginx -t
如果测试成功,重新加载Nginx。
sudo systemctl reload nginx
现在,使用访问Apache的领域之一在浏览器中https://
前缀。 首先,请访问https:// foobar.net /info.php
,你会看到这一点:
我们在本教程中使用了自签名证书,因此浏览器可能会警告我们该连接可能不受信任。 您可以通过信任网站安全地继续。
看在PHP中的变量部分。 可变SERVER_PORT已被设置为443和HTTPS设置为上 ,好像Apache直接通过HTTPS访问。 通过设置这些变量,PHP应用程序不必专门配置为在逆向代理之后工作。
第10步 - 阻止对Apache的直接访问(可选)
因为Apache是在监听端口8080
上的公网IP地址,它是由每个人都可以访问。 它可以通过在防火墙规则集中使用以下IPtables命令来阻止。
sudo iptables -I INPUT -p tcp --dport 8080 ! -s your_server_ip -j REJECT --reject-with tcp-reset
确保使用您的Droplet的IP地址代替红色的示例。 一旦端口8080
被挡在你的防火墙,测试Apache是它无法访问。 打开Web浏览器,并尝试访问Apache的域名之一,在端口8080
。 例如:http:// example.com:8080
浏览器应显示“无法连接”或“网页不可用”错误消息。 随着iptables的tcp-reset
到位的选择,外人会看到端口之间没有什么区别8080
,并且没有它的任何服务的端口。
注:iptables规则默认情况下不生存重新启动系统。 有多种方式来保存iptables规则,但最简单的就是使用iptables-persistent
在Ubuntu的存储库。 探索这篇文章 ,以了解更多有关如何配置IPTables的。
第1步1 - 使用Nginx提供静态文件(可选)
当Nginx代理请求Apache的域时,它会将该域的每个文件请求发送到Apache。 Nginx在提供图像,JavaScript和样式表等静态文件方面比Apache快。 因此,让我们配置的Nginx的apache
虚拟主机文件直接提供静态文件,但在发送请求PHP到Apache。
首先,打开apache
虚拟主机文件。
sudo nano /etc/nginx/sites-available/apache
你需要两个额外的位置块添加到每个服务器模块,以及修改现有的位置块。 (如果你只有一个服务器块,从上一步,你可以完全替换你的文件的内容,所以它匹配的内容如下所示)。此外,你需要告诉Nginx在哪里找到每个站点的静态文件。 这些更改在以下代码中以红色显示:
server {
listen 80;
server_name test.io www.test.io;
root /var/www/test.io;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://your_ip_address:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /\. {
deny all;
}
}
server {
listen 80;
server_name foobar.net www.foobar.net;
root /var/www/foobar.net;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://your_ip_address:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /\. {
deny all;
}
}
如果你也想HTTPS可用,保存listen 443 ssl;
并从第9步其他SSL设置。
该try_files
指令使Nginx的外观在文档根目录文件并直接为他们服务。 如果文件中有一个.php
扩展,请求传递到Apache。 即使在文档根目录中找不到该文件,请求也会传递给Apache,以便像permalink这样的应用程序功能正常工作。
警告: location ~ /\.
指令是很重要的; 这可以防止Nginx的从印刷就像文件内容.htaccess
和.htpasswd
包含敏感信息。
保存文件并执行配置测试。
sudo nginx -t
如果测试成功,重新加载Nginx。
sudo service nginx reload
为了验证这是工作,你可以检查Apache的日志文件/var/log/apache2
,并了解了GET请求info.php
档案test.io
和foobar.net
。 使用tail
命令查看该文件的最后几行,并使用-f
开关来监视更改的文件。
sudo tail -f /var/log/apache2/other_vhosts_access.log
访问http://test.io/info.php
在浏览器中,然后看看从日志的输出。 你会看到Apache确实在回复:
test.io:80 your_server_ip - - [01/Jul/2016:18:18:34 -0400] "GET /info.php HTTP/1.0" 200 20414 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
然后参观index.html
每个网站的网页,你不会看到来自Apache的日志条目。 Nginx为他们服务。
当你完成观察日志文件,按CTRL+C
停止拖尾它。
此设置的唯一注意事项是Apache将无法限制对静态文件的访问。 对静态文件的访问控制将需要的Nginx的进行配置apache
虚拟主机文件。
结论
现在你有一个Ubuntu的Droplet与Nginx的服务example.com
和sample.org
,使用Apache服务一起foobar.net
和test.io
。 虽然Nginx充当Apache的反向代理,Nginx的代理服务是透明的,并且与Apache的域的连接似乎直接从Apache本身提供。 您可以使用此方法来提供安全和静态网站。