nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1

sucre_tan發表於2024-10-29

昨日測試使用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

相關文章