使用Nginx緩存和轉發后,web功能失效的問題
【問題描述】
我這邊一個系統中,是使用一個js插件(http://johannburkard.de/blog/programming/javascript/xslt-js-version-3-0-released-xml-xslt-jquery-plugin.html)實現將XML用XSL轉換后顯示信息的。
最近在原伺服器前面加裝了Nginx做緩存和轉發,該代碼就失效了。
請有經驗的各位給點思路,可能是哪方面的原因。是不是我的Nginx配置有啥問題啊?
【環境描述】
應用伺服器是Domino,埠8080,直接訪問功能正常。
Nginx的埠80,經過其轉發和緩存后,JS功能失效。
Nginx的配置文件如下:
#user nobody;
worker_processes 3;
error_log logs/error.log;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 1000;
#pid logs/nginx.pid;
pid logs/nginx.pid;
#工作模式及連接數上限
events {
worker_connections 1024;
}
#設定http伺服器,利用它的反向代理功能提供負載均衡支持
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
#設定日誌格式
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
#設定請求緩衝
client_header_buffer_size 10k;
large_client_header_buffers 4 4k;
#設定訪問日誌
#access_log logs/access.log main;
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 0;
keepalive_timeout 15;
#註:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區
proxy_temp_path nginx_cache/proxy_temp_dir;
#設置Web緩存區名稱為cache_one,內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬碟緩存空間大小為1GB。
proxy_cache_path nginx_cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;
upstream backend_server {
server 127.0.0.1:8080;
}
#設定虛擬主機,默認為監聽80埠,改成其他埠會出現問題
server {
listen 80;
server_name _*;
#charset koi8-r;
charset utf8;
#設定本虛擬主機的訪問日誌
access_log logs/host.access.log main;
index index.html index.htm;
location ~ \.(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma|xsl)$ {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# expires 24h;
expires 15m;
#進行緩存,使用Web緩存區cache_one
proxy_cache cache_one;
#對不同HTTP狀態碼緩存設置不同的緩存時間
proxy_cache_valid 200 1m;
proxy_cache_valid 304 1m;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
#設置Web緩存的Key值,Nginx根據Key值md5哈希存儲緩存.
#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
proxy_cache_key $host$uri$is_args$args;
}
location / {
#root html;
#index index.html index.htm;
#其餘的不緩存
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_pass http://backend_server;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
《解決方案》
補充一下,嘗試過不用插件,改為直接寫JS代碼(代碼2)實現對XML數據用XSL處理后顯示出來的功能。
也是在直接訪問8080埠時功能正常,經Nginx的80埠去訪問就不行了。
代碼2:var source = new ActiveXObject("Msxml2.DOMDocument");
var style = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
var XSLt=new ActiveXObject("Msxml2.XSLTemplate");
source.async = false;
style.async = false;
source.resolveExternals = false;
style.resolveExternals = false;
source.load(path+"(XMLViewForHomePage)?ReadViewEntries&count=10");
style.load("/webOA/xsl/xslForPortal_sy.xsl");
XSLt.stylesheet = style;
ProcSetParam = XSLt.createProcessor();
ProcSetParam.input = source;
ProcSetParam.transform();
var vHTML=ProcSetParam.output;
《解決方案》
自己頂一下 & 繼續測試中。
《解決方案》
自己頂一下 & 繼續測試中。
《解決方案》
檢查一下是否開啟了gzip壓縮。