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