在Web服务架构中,Nginx和Apache备受欢迎。但它们的工作方式略有不同,并且设计用于不同的目的。因此将Nginx配置为Apache的反向代理可以有效实现两者的优势结合,本文给出了详细的配置步骤和验证指南。
一、Nginx和Apach优势
1、Apache
灵活性和定制性:Apache以其灵活性而闻名。它支持广泛的模块,允许您根据不同的需求和要求定制服务器;
.htaccess用于本地配置:Apache允许将.htaccess文件用于目录级配置管理,让用户无需访问主配置文件即可更好地控制设置;
动态内容支持:Apache直接使用PHPmod_php等模块高效处理动态内容,方便传统Web应用。
2、Nginx
静态内容处理和性能:Nginx在处理静态内容和使用更少的资源管理大量并发连接方面优于Apache;
异步架构:Nginx采用异步、非阻塞架构,可以同时高效处理多个请求,而不会显著增加服务器负载;
作为反向代理的有效性:Nginx经常被用作反向代理,因为它能够通过在服务器之间分配请求来快速有效地管理传入流量。
二、为什么选择Nginx作为Apache的反向代理?
1、性能优化:Nginx能够高效地处理静态内容,并通过异步、非阻塞的架构处理大量并发连接,从而减轻Apache的负载。
2、安全性增强:Nginx可以作为用户和Apache之间的缓冲区,提供额外的安全层来抵御攻击和服务器过载。
灵活的SSL/TLS配置:Nginx可以轻松处理SSL/TLS加密,确保数据传输的安全性。
三、设置Nginx作为Apache的反向代理
1、配置Apache
首先,我们需要修改Apache的监听端口,以避免与Nginx的默认端口80发生冲突。将Apache的监听端口更改为8080或其他非标准端口。
使用文本编辑器打开 Apache 配置文件:
sudo nano /etc/apache2/ports.conf
将 Listen 80 行更改为 Listen 8080:
Listen 8080 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
保存文件并关闭编辑器。
编辑测试主机:
sudo nano /etc/apache2/sites-enabled/test.friendhosting.net.conf
<VirtualHost *:8080> ServerAdmin webmaster@test.friendhosting.net ServerName test.friendhosting.net ServerAlias www.test.friendhosting.net DocumentRoot /var/www/test.friendhosting.net/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
重新启动Apache以应用更改:
sudo systemctl restart apache2
端口更改允许Nginx接受所有传入连接并充当反向代理,从而防止Apache和Nginx之间的冲突。
2、配置Nginx作为反向代理
在Nginx的配置文件中,我们需要定义一个server块来监听端口80,并将所有请求代理到Apache的8080端口。同时,我们可以配置Nginx直接处理某些静态资源(如图片、CSS、JavaScript等),以提高性能。
使用文本编辑器打开Apache配置文件:
sudo nano /etc/nginx/sites-available/test.friendhosting.net
将内容替换为以下内容:
server { listen *:80; server_name test.friendhosting.net www.test.friendhosting.net; access_log /var/log/nginx/access.log; location / { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_connect_timeout 120; proxy_send_timeout 120; proxy_read_timeout 180; } location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ { root /var/www/test.friendhosting.net/; } }
这些设置会将所有流量从 Nginx 重定向到在端口 8080 上运行的 Apache,该配置提供了动态内容处理(通过代理到 Apache)和静态内容(直接通过 Nginx)的有效分离,从而优化了性能和资源管理。
检查Nginx配置是否有错误:
sudo nginx -t
重启Nginx:
sudo systemctl restart nginx
三、验证配置是否生效
通过netstat-nltp命令查看Nginx和Apache的监听端口,确保Nginx在80端口上监听,而Apache在8080端口上监听。同时,通过访问你的网站来验证Nginx是否成功地将请求代理到了Apache。
允许查看所有活动连接和侦听端口的列表,以及它们对应的 PID(进程标识符)和服务名称。在命令输出中,查找指示 Nginx 正在侦听端口 80 和 Apache 正在侦听端口 8080 的行。这表明 Nginx 作为前端工作,接受传入的 HTTP 请求,而 Apache 充当后端,在非标准端口上处理动态内容。
另外,检查网站的正确性。在本文例子中,检查的是http://test.friendhosting.net的工作。
子域可通过 http 访问,检查 nginx 日志表明它包含有关提供给 nginx 的静态文件的数据。
-
广告合作
-
QQ群号:4114653