我的nginx.conf正在处理本地(OSX),但在prod(Ubuntu)上抛出一个错误
完整的文件: https : //github.com/thomasdane/partywave/blob/master/nginx.conf
但相关部分是:
# Expires map map $sent_http_content_type $expires { default off; text/html 1w; text/css 1w; application/javascript 1w; ~image/ 1w; } server { listen 80; expires $expires; server_name http://www.partywave.co/; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
在我的Mac上,这很好,输出:
curl -I localhost/images/hero.jpg HTTP/1.1 200 OK Server: nginx/1.10.1 Date: Tue, 25 Oct 2016 09:27:51 GMT Content-Type: image/jpeg Content-Length: 270624 Connection: keep-alive X-Powered-By: Express Accept-Ranges: bytes Cache-Control: max-age=604800 Last-Modified: Fri, 09 Sep 2016 09:57:09 GMT ETag: W/"42120-1570e612108" Expires: Tue, 01 Nov 2016 09:27:51 GMT
但是,当我运行生产(Ubuntu 14.04)完全相同的nginx.conf时,我得到以下错误:
nginx: [emerg] "expires" directive invalid value in /etc/nginx/nginx.conf:46
如果我删除了$ expires代码,它在生产上工作正常(当然没有过期)。
我一直在谷歌search了一会儿,不知道为什么。 会爱任何帮助。
你在ubuntu上有什么版本的nginx? 如果你有14.04的默认回购,它是1.4.6 。 而expire只接受自1.7.9以来的变量。 您可以添加nginx 官方回购,并从中安装1.10。 半自动安装:
apt-get install -y lsb-release LIST="/etc/apt/sources.list.d/nginx.list"; OS=`lsb_release -si | tr '[:upper:]' '[:lower:]'`; RELEASE=`lsb_release -sc`; if [ ! -f $LIST ]; then echo -e "deb http://nginx.org/packages/$OS/ $RELEASE nginx\ndeb-src http://nginx.org/packages/$OS/ $RELEASE nginx" > $LIST; else echo "File $LIST exists! Check it."; fi wget -q -O- http://nginx.org/keys/nginx_signing.key | apt-key add - apt-get update apt-get remove -y nginx-full nginx-common apt-get install nginx