我的设置(在Debian 7上运行):
>端口80上的Nginx
>端口8080上的apache
>在Nginx中使用proxy_pass http://127.0.0.1:8080将所有动态(PHP)请求推送到apache
>使用静态子域直接通过Nginx(不使用apache)传递静态内容(img,css,js,…).配置如下所示:
server {
server_name static.DOMAIN.net;
root /var/www/DOMAIN.net/static/;
access_log off;
error_log /var/log/Nginx/DOMAIN.net/error.log;
location / {
expires max;
add_header Pragma public;
add_header Cache-Control "public,must-revalidate,proxy-revalidate";
}
}
根据我的理解,它目前对静态文件的作用是,Nginx从/var/www/DOMAIN.net/static/抓取文件并传递它,添加此文件很长时间没有过期的标题信息但是客户端应该始终检查是否有更新的版本(因为目前这些静态文件不时被更新,我希望它们确保客户端使用最新的css和imgs).基本上我告诉客户端在浏览器中缓存静态内容.
我的问题:我有一个网站,其缩小的css文件大小约为12 KB.现在用户访问DOMAIN.net/some.PHP.根据Google的Critical Path Explorer,将html-result传递给请求用户需要大约5ms.这可以.然后发送css需要300-400ms.在这种情况下,关键路径显然是“加载html,然后加载css,然后完成”.基本上这意味着在用户的浏览器可以显示网站之前需要大约400毫秒,然后开始异步请求图像并在它们到达时显示它们.图像的大小也很慢,但至少它们不会阻止网站在浏览器中加载/显示.所以我真的需要加快静态文件的传递.证明在400ms内交付12KB css是可悲的:我也在本网站上使用http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js文件.这个文件要大得多,但只需要大约10毫秒.我知道我不是谷歌,可能无法达到他们的时间,但我目前的交货时间很糟糕.
我的理论:我需要更改Nginx,以便将静态文件缓存在内存中.我研究了关于Nginx和缓存文件的abit,但我发现的所有命令都像proxy_cache那样用于其他目的(在我的设置中我会用它来缓存Nginx从apache获取的东西 – 我不想缓存虽然动态PHP的东西,我想缓存静态CSS和图像).
那么:我如何加快静态文件传递? Nginx能以某种方式将文件存储在内存中吗?还有什么可以加快交货速度?
目前的Nginx.conf:
user www-data;
worker_processes 4;
pid /var/run/Nginx.pid;
events {
worker_connections 4096;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 5;
types_hash_max_size 2048;
server_tokens off;
server_names_hash_bucket_size 64;
server_name_in_redirect off;
include /etc/Nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/Nginx/access.log;
error_log /var/log/Nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 10;
gzip_types text/plain text/css image/png image/gif image/jpeg application/json application/x-javascript text/xml application/xml application/xml+RSS text/javascript im$
gzip_vary on;
gzip_proxied any;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
##
# Proxy Settings
##
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-naxsi config
##
# Uncomment it if you installed Nginx-naxsi
##
#include /etc/Nginx/naxsi_core.rules;
##
# Nginx-passenger config
##
# Uncomment it if you installed Nginx-passenger
##
#passenger_root /usr;
#passenger_ruby /usr/bin/ruby;
##
# Virtual Host Configs
##
include /etc/Nginx/conf.d/*.conf;
include /etc/Nginx/sites-enabled/*;
}