将Nginx作为Apache的反向代理服务器仅用于动态内容
我打算将所有静态内容都移动到CDN上,所以在我的服务器上我只剩下动态内容。我现在将Nginx设置为Apache的反向代理。 Nginx直接发送的静态请求,无需前往Apache。将Nginx作为Apache的反向代理服务器仅用于动态内容
在这种情况下,Nginx处理了很大一部分请求,我可以清楚地看到Nginx的必要性。
现在,我将所有静态内容移动到另一个域,是否还需要在Apache前面有nginx。因为现在所有请求都是默认的动态请求,所有请求都转到Apache。
Nginx和Apache仅对动态内容运行有没有其他好处。
我的动态内容是PHP/MySQL的
编辑:
要明确:我现在有Nginx的反向代理。它提供静态和动态内容。但我将我的静态文件移动到CDN。那么我还需要在我的域名上使用Nginx吗?
不,你不需要nginx了。
你可以给我一些解释,为什么这不再需要。它不会以任何方式帮助Apache。 – 2010-04-16 22:42:09
首先,我对你的问题有点困惑。您添加nginx仅用于提供静态内容。你不再提供静态内容,但你想知道你是否仍然需要nginx?它现在没有任何用处,只是增加了开销。 – goat 2010-04-16 22:48:26
我想也许它也为动态内容提供帮助。 – 2010-04-17 09:41:14
nginx的前面是情况最好的解决方案,您使用Apache 1.3:
的nginx可以轻松地服务于成千上万conections的,但是Apache不能
你能详细说一下你的意思吗?因为我只通过Apache提供动态内容。我使用Apache 2 – 2010-04-16 18:16:06
我所做的一个网站是:
- 设置nginx的作为反向代理中的Apache
- 配置它,以便前:
- 请求PHP页面(即动态内容)发送给Apache
- 对静态文件的请求(CSS,JS,...)由nginx直接提供。
此无需设置两个域:都是在同一个域。
基本上,我所做的就是:
- 服务图片来自nginx的,没有gzip压缩,使用缓存
- 从服务nginx的JS/CSS(即文本文件),用gzip压缩,与缓存
- 服务于一些其他扩展(pdf,exeutables,...)形式nginx的,无压缩,无缓存
- 传给其他请求到Apache
这里是我的nginx的配置文件中的样子:
server {
listen 80;
server_name MY_DOMAIN_NAME;
access_log /var/log/nginx/MY_DOMAIN_NAME.access.log;
gzip on;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css text/xml application/xml application/xml+rss application/xml+atom text/javascript application/x-javascript application/javascript;
location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ {
root /home/www/MY_DOMAIN_NAME;
#access_log off;
gzip off;
expires 1d;
}
location ~* ^.+\.(css|js)$ {
root /home/www/MY_DOMAIN_NAME;
#access_log off;
expires 1d;
}
location ~* ^.+\.(pdf|gz|bz2|exe|rar|zip|7z)$ {
root /home/www/MY_DOMAIN_NAME;
gzip off;
}
location/{
proxy_pass http://MY_DOMAIN_NAME:8080;
proxy_redirect off;
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_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
现在,为什么做这样的东西?
好,nginx的应该是:
- 需要更少的内存
- 更快
- 能够处理更多的连接
所以,我认为它可以帮助网站有点流量,以降低Apache的负载。
好吧,也许我的问题不是很清楚。但这是我现在的设置。这在我的第一段中有解释。但现在我正在将我的静态文件移动到另一个域。这样我使用的资源就更多了。但是我想知道的是,如果我仍然需要Nginx。 – 2010-04-16 18:13:27
您还可以使用nginx从Apache实例卸载SSL处理。
例如,我们有一个配置了nginx-> haproxy-> apache服务器池的堆栈。 nginx和haproxy一起生活在一个心跳群集上,并将请求提交到后端的apache框中。我们在nginx前端安装所有的SSL证书。
是的,你绝对需要在Apache之前的nginx。 Apache每个连接使用1个线程或进程。这些线程中的每一个占用内存。如果您有几百人访问您的网站并且启用了Keepalive,则这些浏览器中的每一个都会使apache进程或线程忙于占用服务器上的内存。
您可以通过禁用您的apache服务器上的keepalive来解决此问题,但这会降低网站的性能,因为浏览器无法重新使用连接。
因此,您可以使用nginx作为启用Keepalive的反向代理。它可以维持数千个连接,占用很小的内存(大约8 megs)。因为nginx对于你的apache服务器是本地的,所以每个请求只占用apache子或线程几微秒。这意味着只需少量的apache进程即可为数千人提供服务。
此外,nginx的配置比apache灵活得多,并且通过在前端提供灵活性。
从技术角度来看,这显然是最好的答案。您不希望pre-fork Apache使用keep-alive来处理您的客户端连接。当然,您可以禁用保持活动,那么您的所有用户都会抱怨您的网站速度很慢(尤其是远离用户)。 – diq 2012-04-15 01:09:53
非常好的答案,但不要忘记nginx可以做的所有其他好东西。与这个问题非常相关的就是缓存。动态内容的缓存将会更有意义(如果可能的话)。所以是的,nginx会帮助...很多。 – 2012-09-16 13:39:51
这与AppEngine有什么关系? – 2010-04-16 18:17:24
“动态内容”是指每个用户的不同内容,还是仅仅通过PHP生成的内容?如果同一页面用于多个用户,则可以让Nginx将其缓存几秒钟,这在处理重负载时会有很大帮助。 – 2010-04-16 21:50:52
不,页面总是不一样。我猜不需要Nginx。 – 2010-04-16 22:41:05