Nginx Phusion Passenger配置报错:passenger_log_file等指令不被允许
解决Nginx+Phusion Passenger中
passenger_log_file等指令无法在server块配置的问题 这个问题本质是Phusion Passenger的指令作用域限制导致的——你用到的passenger_log_file、passenger_default_user和passenger_default_group这几个配置项,不允许直接放在单个server(虚拟主机)块内,它们的合法配置上下文是http块(或者Nginx的全局main上下文)。
为什么会报错?
Phusion Passenger设计时,把这类指令定义为全局/基础配置:
passenger_log_file是用来指定Passenger自身运行日志的全局路径,不是单个虚拟主机的访问日志passenger_default_user/passenger_default_group是设置Passenger运行所有应用时默认使用的用户/组,属于全局生效的参数
这些指令的作用域不包含server块,所以放在里面会触发Nginx的语法错误。
正确的配置方式
你需要把这些指令移到/etc/nginx/nginx.conf的http块中,让所有server块继承这些配置:
http { # 保留你原有的全局配置(比如mime类型、日志格式等) include /etc/nginx/mime.types; default_type application/octet-stream; # 添加Passenger的全局配置 passenger_log_file /var/log/test/access.log; passenger_default_user test; passenger_default_group test; # 然后是你的虚拟主机配置 server { listen 80; server_name example.com; root /home/test/api; passenger_app_root /home/test/api/dist; passenger_enabled on; passenger_app_type node; passenger_startup_file app.js; # 这里只保留和当前虚拟主机相关的配置即可 } }
如果需要单个虚拟主机的独立日志?
如果你想为这个server单独记录应用访问日志,不用passenger_log_file,而是用Nginx原生的access_log和error_log指令,直接放在server块里:
server { # ...其他配置... access_log /var/log/test/example_access.log; error_log /var/log/test/example_error.log; }
Passenger的请求日志默认会整合到Nginx的access日志中,这样配置就能实现单虚拟主机的独立日志记录了。
内容的提问来源于stack exchange,提问作者Sebastian Borgstedt
相关产品推荐
相关产品推荐

