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

 

posted @ 2024-10-29 16:04  sucre_tan  阅读(16)  评论(0编辑  收藏  举报