Docker-Compose部署Nginx+Node.js时http指令报错,求解决
Nginx配置报错"http directive is not allowed here"的解决方法
问题出在配置文件的结构逻辑上:
官方Docker镜像的默认主配置/etc/nginx/nginx.conf已经包含顶层的http块,并且通过include /etc/nginx/conf.d/*.conf;指令,将conf.d目录下的所有配置文件导入到这个http块内部使用。
你在site.conf里又嵌套了一层http{}块,相当于在已有的http块中再定义http块,违反了Nginx的配置语法规则,因此触发报错。
修正后的配置需去掉外层的http{}包裹,直接保留内部配置内容即可:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; server { listen 80; server_name app.dev www.app.dev; gzip on; gzip_disable "msie6"; gzip_comp_level 6; gzip_min_length 1100; gzip_buffers 16 8k; gzip_proxied any; gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/rss+xml image/svg+xml; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_redirect off; location / { proxy_pass http://app:3000; } }
注:如果主配置中已定义同名的main日志格式,启动时会出现重复定义的警告,但不影响运行,可根据需求删除log_format和access_log两行。
内容的提问来源于stack exchange,提问作者Kosmylo
相关产品推荐
相关产品推荐

