作为Apache的反向代理,Nginx是否只能帮助dynamic内容

我打算将我所有的静态内容移动到一个CDN,所以在我的服务器上我只剩下dynamic内容。 我现在把Nginx设置为Apache的反向代理。 Nginx直接发送的静态请求,而不必去Apache。

在这种情况下,Nginx处理了很大一部分请求,我可以清楚地看到Nginx的必要性。

现在我把所有的静态内容移动到另一个域,是否仍然需要在Apache之前有nginx。 因为现在所有的请求都是默认的dynamic请求,都转到Apache。

让Nginx和Apache只运行dynamic内容还有其他好处。

我的dynamic内容是PHP / MySQL

编辑:

要清楚的是: 我现在有Nginx作为反向代理。 它提供静态和dynamic内容。 但我正在将我的静态文件移动到CDN。 那么我还需要在我的域名上使用Nginx吗?

    不,你不需要nginx了。

    是的,你绝对需要在Apache之前的nginx。 Apache每个连接使用1个线程或进程。 每个线程占用内存。 如果您有几百人访问您的网站,并且启用了Keepalive,则这些浏览器中的每一个都会使apache进程或线程忙于占用服务器上的内存。

    你可以通过禁用你的apache服务器上的keepalive来解决这个问题,但是这会降低你网站的性能,因为浏览器不能重用连接。

    所以相反,你使用nginx作为一个反向代理启用keepalive。 它可以维持数千个连接,占用很少的内存(大约8 megs)。 由于nginx对于你的apache服务器是本地的,每个请求只占用一个apache子或线程几微秒。 这意味着您只需要一小撮的apache进程即可为成千上万的用户提供服务。

    另外nginx的配置比apache灵活得多,通过在前端使用它可以提供很大的灵活性。

    我为一个网站所做的是:

    • 在Apache前设置nginx作为反向代理
    • 配置它如下:
      • 请求到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从Apache实例中卸载SSL处理。

    例如,我们有一个配置了nginx-> haproxy-> apache服务器池的堆栈。 nginx和haproxy一起生活在心跳群集上,并将请求提交到后端的apache框中。 我们在nginx前端安装所有的SSL证书。

    在使用Apache 1.3的情况下,前面的nginx是最好的解决方案:

    nginx可以很容易地服务于成千上万的连接,但Apache不能