根据我对nginx文档的理解,位置不能嵌套(或者更确切地说,如果它们的效果不可继承),并且proxy_pass不能属于服务器{}级别.所以我现在的配置是这样的,我知道我可以通过使用文件路径减轻一些但是让我假装在使用proxy_pass时我想在不同的路径上使用不同的缓存头.据推测,有一种更好的方式来写这个没有重复:
server {
listen 80;
server_name salessystem.acmecorp.com;
location /extjs/ {
## proxy_buffers 128 256k;
proxy_pass http://localhost:5400/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
expires max;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 7;
gzip_proxied any;
gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
access_log off;
break;
}
location / {
## proxy_buffers 128 256k;
proxy_pass http://localhost:5400/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
expires epoch;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 7;
gzip_proxied any;
gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
access_log off;
break;
}
}
解决方法:
我想你的nginx配置如下:
>因为它只是两个不同位置的expires标头不同,尽管两者都匹配代理
服务器.
>尝试将两个位置放在单个块中
>基于查询字符串,(或位置匹配字符串)设置不同
过期标题
标签.
server {
listen 80;
server_name salessystem.acmecorp.com;
location ~* (/extjs/|/) {
## proxy_buffers 128 256k;
proxy_pass http://localhost:5400/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
expires max;
if ($query_string ~ /extjs/) {
expires epoch;
}
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 7;
gzip_proxied any;
gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
access_log off;
break;
}
}
但是请根据您的需要进行测试,特别是在位置和query_string值匹配的正则表达式匹配附近.
然而,目前尚不清楚,为什么你想要从代理服务器(似乎是动态应用服务器)提供extjs,因为如果我的假设是正确的,它们只是纯文本文件.与extjs相关的请求不需要通过代理或app逻辑系统,只需通过文件系统独立提供即可.我想把它保存在它独立的位置,并且在它自己的位置块中具有唯一的gzip / expires指令,而其他常用指令可以保存在服务器块本身中.
例如:
server {
...
common gzip directives
common header setters
common expires setters
...
location / {
proxy to backend app server
settings unique to / location
..
}
location /extjs {
settings unique to /extjs location
expires header reset
...
}
}
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!