在做简单代理时找不到Nginx文件



我正在尝试配置简单的Nginx反向代理,这是我的nginx.conf文件

http {
server {
listen 80 default_server;
listen [::]:80 default_server;
location /api {
proxy_pass http://172.17.0.1:8081/api;
}
}
}

这是Dockerfile

FROM openresty/openresty:latest
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80/tcp
ENTRYPOINT ["nginx", "-g", "daemon off;"]

现在,我执行docker build . -t my-nginxdocker run -p 80:80 my-nginx

我调用端点在127.0.0.1:80/api

然而,我得到404回响应和在nginx日志中,我可以看到

172.17.0.1 - - [02/Jan/20123:14:39:16 +0000] "POST/api HTTP/1.1"404 159 "-"Apache-HttpClient/4.5.13 (Java/17.0.5)";2023/01/02 14:39:16[错误]7#7:*1 open() "/usr/local/openresty/nginx/html/api"失败的(2:没有这样的文件或目录),客户端:172.17.0.1,服务器:localhost,请求:"POST/api HTTP/1.1"主机:"127.0.0.1:80">

为什么会这样?这个配置有什么问题?

原因是默认情况下openresty docker映像不会在/etc/nginx/nginx.conf下查找nginx配置文件,而是在/usr/local/openresty/nginx/conf/nginx.conf下查找。您可以通过运行

来验证这一点:
# nginx -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful

这就是说,/usr/local/openrestyt/nginx/conf/nginx.conf文件有一个包含指令,用于/etc/nginx/conf下的所有文件。因此,你可以把你的nginx服务器和位置配置放在这个文件夹下。

将Dockerfile替换为:

FROM openresty/openresty:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80/tcp
ENTRYPOINT ["nginx", "-g", "daemon off;"]

并删除nginx配置中的HTTP键。

请务必阅读docker文档以获取openrestimage,因为您将找到所有必需的信息:

相关内容

  • 没有找到相关文章

最新更新