如何在 Ubuntu 15.10 上安装 Nginx 作为 Apache 的反向代理
本教程适用于这些操作系统版本
- Ubuntu 12.04 LTS(精准穿山甲)
在此页
- 第 1 步 - 安装 Apache 和 PHP
- 第 2 步 - 配置 Apache 和 PHP
- 第 3 步 - 安装 Nginx
- 第 4 步 - 配置 Nginx
- 第 5 步 - 配置日志记录
- 结论
Nginx 或 \engine-x\ 是一个低内存占用的高性能 web 服务器,由 Igor Sysoev 于 2002 年创建。Nginx 不仅仅是一个 web 服务器,它可以作为反向使用代理许多协议,如 HTTP、HTTPS、POP3、SMTP 和 IMAP,并作为负载平衡器和 HTTP 缓存。
Apache 是由 Apache 软件基金会下的开源社区维护的最流行的 Web 服务器软件。有许多附加模块可用于 apache,如 WebDav 支持或 web 应用程序防火墙,如 mod_security,它支持许多 web 编程语言,如 Perl、Python、PHP 通过本机模块或通过 cgi、fcgi 和 FPM 接口。
在本教程中,我将在 Ubuntu 15.10 上安装和配置 Nginx 作为 Apache Web 服务器的缓存反向代理,Nginx 用作前端,Apache 用作后端。 Nginx 将在端口 80 上运行以响应来自用户/浏览器的请求,然后该请求将被转发到在端口 8080 上运行的 apache 服务器。
第 1 步 - 安装 Apache 和 PHP
使用 SSH 登录到您的 ubuntu 服务器并通过运行以下命令成为 root 用户:
sudo su
然后使用 apt-get 命令安装 apache:
apt-get install apache2
安装 apache 后,我们必须安装 PHP 作为本教程的 apache 模块:
apt-get install php5 php5-mysql libapache2-mod-php5
第 2 步 - 配置 Apache 和 PHP
默认情况下,apache 侦听端口 80。我们必须将 apache 配置为在端口 8080 上运行以用于我们的代理设置,因为稍后 nginx 将使用端口 80。
如果要更改apache web服务器的端口,必须编辑apache配置文件\/etc/apache2/ports.conf\,然后在\/etc/apache2/sites中进行虚拟主机配置-可用/\”目录。
首先通过使用 vim 编辑器编辑文件 \ports.conf\ 将 apache 的端口更改为 8080:
vim /etc/apache2/ports.conf
在第 5 行,将端口 80 更改为 8080。
Listen 8080
保存并退出。
现在转到虚拟主机目录并编辑文件 \000-default.conf\ :
cd sites-available/
vim 000-default.conf
确保您的配置与以下相同:
<VirtualHost *:8080>
ServerName www.reverse.com
ServerAlias reverse.com
ServerAdmin
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
保存并退出。
接下来,测试配置并重新启动 apache:
apachectl configtest
systemctl restart apache2
最后我们验证 apache 和 php 是否正常工作。在目录 \/var/www/html/\ 中创建一个名为 \info.php\ 的新文件。
cd /var/www/html/
echo "<?php phpinfo(); ?>" > info.php
访问您的网站 www.reverse.com:8080/info.php。

结果应该类似于上面的屏幕截图。

第 3 步 - 安装 Nginx
使用以下 apt-get 命令安装 Nginx:
apt-get install nginx
第 4 步 - 配置 Nginx
安装 Nginx 后,将 Nginx 配置为充当运行在端口 8080 上的 apache Web 服务器的反向代理。
进入nginx配置目录,编辑文件\nginx.conf\:
cd /etc/nginx/
vim nginx.conf
通过取消注释 gzip 行为 Nginx 启用 Gzip 压缩:
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
最重要的是:
gzip on :开启 gzip 压缩。
gzip_types :是您要进行压缩的 MIME 类型列表。
gzip_proxied any :为代理请求启用压缩。
在 gzip 设置下,添加这些代理缓存设置:
# Proxy Cache Settings
proxy_cache_path /var/cache levels=1:2 keys_zone=reverse_cache:60m inactive=90m max_size=1000m;
代理缓存的目录是 /var/cache。
levels 是一个指令,它告诉 Nginx 缓存是如何保存在文件系统中的。
key_zone 只是缓存区域的名称,您可以随意选择,但不要在名称中添加特殊字符或空格。我将在此处使用名称“reverse_cache”。

保存并退出。
现在我们将在目录\/etc/nginx/sites-available\ 中配置一个虚拟主机。
在本教程中,我将创建一个名为“reverse.conf”的新虚拟主机配置文件。刚刚进入目录并使用 vim 创建新文件:
cd /etc/nginx/sites-available
vim reverse.conf
粘贴下面的配置:
server {
listen 80;
# Site Directory same in the apache virtualhost configuration
root /var/www/html;
index index.php index.html index.htm;
# Domain
server_name www.reverse.com reverse.com;
location / {
try_files $uri $uri/ /index.php;
}
# Reverse Proxy and Proxy Cache Configuration
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
# Cache configuration
proxy_cache reverse_cache;
proxy_cache_valid 3s;
proxy_no_cache $cookie_PHPSESSID;
proxy_cache_bypass $cookie_PHPSESSID;
proxy_cache_key "$scheme$host$request_uri";
add_header X-Cache $upstream_cache_status;
}
# Enable Cache the file 30 days
location ~* .(jpg|png|gif|jpeg|css|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
proxy_cache_valid 200 120m;
expires 30d;
proxy_cache reverse_cache;
access_log off;
}
# Disable Cache for the file type html, json
location ~* .(?:manifest|appcache|html?|xml|json)$ {
expires -1;
}
location ~ /\.ht {
deny all;
}
}
保存并退出。
然后激活新的虚拟主机配置:
ln -s /etc/nginx/sites-available/reverse.conf /etc/nginx/sites-enabled/
最后我们将测试 nginx 配置并重启 nginx:
nginx -t
systemctl restart nginx
Nginx 现在配置为反向代理。你可以用 curl 测试它:
curl -I www.reverse.com

Cache-Control: no-cache 表示 index.html 和所有以 .html 结尾的文件都不会缓存。
另一个测试:
curl -I www.reverse.com/info.php

X-Cache: HIT 表示页面正在由 Nginx 缓存提供服务。
第 5 步 - 配置日志记录
在这一步中,我将配置 apache 来记录访问者的真实 ip 而不是本地 IP。
请安装 apache 模块 \libapache2-mod-rpaf\ 并编辑模块配置文件:
sudo apt-get install libapache2-mod-rpaf
cd /etc/apache2/mods-available/
vim rpaf.conf
将服务器 IP 添加到第 10 行。我的服务器 IP:192.168.1.108。
RPAFproxy_ips 127.0.0.1 192.168.1.108 ::1
保存并退出。
现在重新启动 apache:
systemctl restart apache2
通过使用 tail 命令查看 apache 访问日志来测试 rpaf:
tail -f /var/log/apache2/access.log

就这样。
Nginx 作为反向代理安装在 Apache Web 服务器前面。如果访问者请求一个php文件,请求会被传递到8080端口的apache,你可以在apache日志文件上看到访问者的真实ip。
结论
Nginx 是一种快速且流行的网络服务器,内存使用率低,可以充当 HTTP 和 HTTPS 协议的网络服务器和反向代理。 Apache 的 Nginx 反向代理是一种使用 Nginx 作为前端,使用 Apache 作为后端的设置。 Nginx 处理来自浏览器的传入请求并将其传递给 apache 后端。在本教程中,我们为 nginx 设置了一个配置作为缓存 PHP 文件请求和图像的 http 缓存。