昨日测试使用dockerfile搭建nginx,遇到了报错:nginx: [emerg] “user” directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1 。
网上没搜到相关的原因,今日找到原因,记录一下
【nginx使用教程可参考】:《Nginx详解及配合docker应用实战记录》
一、配置描述
- 我的目录层级是这样的
- 我的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/
以上,重新构建重新启动即可