nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1
昨日测试使用dockerfile搭建nginx,遇到了报错:nginx: [emerg] “user” directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1 。
网上没搜到相关的原因,今日找到原因,记录一下
一、配置描述
- 我的目录层级是这样的
- 我的Dockerfile是这样的
FROM nginx:latest EXPOSE 80 443 VOLUME /log ADD nginx.conf /etc/nginx/nginx.conf RUN rm -rf /etc/nginx/conf.d/default.conf COPY *.conf /etc/nginx/conf.d/ COPY ./ssl/* /etc/nginx/ssl/
nginx.conf 配置
二、原因分析
2.1、分析过程
nginx: [emerg] “user” directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1 。
这个报错意思说我nginx.conf文件的第一行"user"指令不被允许。
案例说这里配的没问题,并且我去掉"user",会报
nginx: [emerg] “worker_processes” directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1 。
所以虽然报错说nginx.conf有问题,但其实并不是nginx.conf配置本身的问题
我们看Dockerfile,其中下面两行的目的是:将/etc/nginx/conf.d/目录下只留我们配置的server文件 但是,结合我的目录层级,可以看到,这里*.conf把nginx.conf也copy到/etc/nginx/conf.d/目录下了,所以才报的 > nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1 。
RUN rm -rf /etc/nginx/conf.d/default.conf COPY *.conf /etc/nginx/conf.d/
2.2、原因总结
配置文件nginx.conf
是要放在/etc/nginx/目录下的
而nginx.conf
中引入的文件(用于独立配置server),需要放在/etc/nginx/conf.d/目录下nginx.conf
会引入/etc/nginx/conf.d/目录下的*.conf文件
nginx: [emerg] “user” directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1 。
这个报错是因为:把nginx.conf
是要放在了/etc/nginx/conf.d/目录下。
导致nginx.conf
文件又引入nginx.conf
文件,引入是引入到http块中,当然不能有"user"指令
三、问题解决
1、把独立配置着server的conf文件以443开头区分,如下
2、dockerfile中COPY时,443.*.conf筛选
FROM nginx:latest EXPOSE 80 443 VOLUME /log ADD nginx.conf /etc/nginx/nginx.conf RUN rm -rf /etc/nginx/conf.d/default.conf COPY 443.*.conf /etc/nginx/conf.d/ COPY ./ssl/* /etc/nginx/ssl/
重启服务即可,熟悉的404 index页面出现了😄:
原文:https://www.modb.pro/db/325064