我坚持下面的nginx conf模板:
# Special characters - dollar signs, spaces inside of quotes, etc. - # should be escaped with a single backslash or can cause deploy failures. server { listen [::]:80; listen 80; server_name $NOSSL_SERVER_NAME; access_log /var/log/nginx/${APP}-access.log; error_log /var/log/nginx/${APP}-error.log; # set a custom header for requests # add_header X-Served-By www-ec2-01; location / { proxy_pass http://$APP; proxy_http_version 1.1; proxy_set_header Upgrade \$http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host \$http_host; proxy_set_header X-Forwarded-Proto \$scheme; proxy_set_header X-Forwarded-For \$remote_addr; proxy_set_header X-Forwarded-Port \$server_port; proxy_set_header X-Request-Start \$msec; } include $DOKKU_ROOT/$APP/nginx.conf.d/*.conf; # Proxy download location ~* ^/internal_redirect/(.*?)/(.*) { # Do not allow people to mess with this location directly # Only internal redirects are allowed internal; # Location-specific logging access_log logs/internal_redirect.access.log main; error_log logs/internal_redirect.error.log warn; # Extract download url from the request set $download_uri \$2; set $download_host \$1; # Compose download url set $download_url http://\$download_host/\$download_uri; # Set download request headers proxy_set_header Host \$download_host; proxy_set_header Authorization ''; # The next two lines could be used if your storage # backend does not support Content-Disposition # headers used to specify file name browsers use # when save content to the disk proxy_hide_header Content-Disposition; add_header Content-Disposition 'attachment; filename="\$args"'; # Do not touch local disks when proxying # content to clients proxy_max_temp_file_size 0; # Download the file and send it to client proxy_pass \$download_url; } }
dokku文档告诉我用一个\来逃避'$',所以我做到了。
nginx能告诉nginx n00b上面的模板有什么问题吗?
Dokku输出以下错误:
remote: nginx: [emerg] unknown log format "main" in /home/dokku/everseller/nginx.conf:117 remote: nginx: configuration file /etc/nginx/nginx.conf test failed
谢谢!
====更新conf ====
# Special characters - dollar signs, spaces inside of quotes, etc. - # should be escaped with a single backslash or can cause deploy failures. server { listen [::]:80; listen 80; server_name $NOSSL_SERVER_NAME; access_log /var/log/nginx/${APP}-access.log; error_log /var/log/nginx/${APP}-error.log; # set a custom header for requests # add_header X-Served-By www-ec2-01; location / { proxy_pass http://$APP; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Request-Start $msec; } include $DOKKU_ROOT/$APP/nginx.conf.d/*.conf; # Proxy download location ~* ^/internal_redirect/(.*?)/(.*) { # Do not allow people to mess with this location directly # Only internal redirects are allowed internal; # Location-specific logging access_log logs/internal_redirect.access.log main; error_log logs/internal_redirect.error.log warn; # Extract download url from the request set $download_uri $2; set $download_host $1; # Compose download url set $download_url http://$download_host/$download_uri; # Set download request headers proxy_set_header Host $download_host; proxy_set_header Authorization ''; # The next two lines could be used if your storage # backend does not support Content-Disposition # headers used to specify file name browsers use # when save content to the disk proxy_hide_header Content-Disposition; add_header Content-Disposition 'attachment; filename="$args"'; # Do not touch local disks when proxying # content to clients proxy_max_temp_file_size 0; # Download the file and send it to client proxy_pass $download_url; } }
美元符号表示variables。 所以如果使用某个地方没有指出一个variables,他们应该逃脱。
你的configuration包含很多variables,美元符号不应该被转义,例如proxy_set_header Upgrade \$http_upgrade;
应该
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host \$http_host; 应该读取proxy_set_header Host $http_host; 等等。
顺便说一句:我不是一个智者;-)