我正在尝试配置简单的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-nginx
和docker 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,因为您将找到所有必需的信息: