我正在学习Nginx。我有一个示例设置,一个容器中有nginx:1.23.3-alpine
,另一个容器中有docker/getting-started
,在端口4444上运行。
我有一个默认的index.html在http://localhost
,它显示了我正确的“着陆页”。
我可以在http://localhost:4444
上找到我的入门教程容器,它解析为http://localhost:4444/tutorial/
。
现在,我想了解如何配置它,以便通过http://localhost/tut/
访问教程,并将其解析为至少http://localhost:4444/tutorial/
,但更好的是http://localhost/tutorial/
。所有这些都是为了准备设置我的实际堆栈,我想使用特定的公共URL访问各种端口上的容器,但不显示它们的端口号,最终都在HTTPS上。因此,这个简单的初始测试。
所以...docker compose up
-没有错误。http://localhost
返回200http://localhost:4444
从http://localhost:4444/tutorial/
返回200
问题是:
http://localhost/tut/
返回404,因为根据日志,它正在查找/usr/share/nginx/html/tutorial/index.html
my-nginx | 2023/03/11 03:14:16 [error] 31#31: *6
"/usr/share/nginx/html/tutorial/index.html" is not found (2: No such file or directory),
client: 172.18.0.1, server: , request: "GET /tutorial/ HTTP/1.1", host: "localhost",
referrer: "http://localhost/tut/"
我尝试过不同的服务器块和各种各样的东西建议在其他职位,但这是最接近我来到一个不太工作的解决方案!
我的停靠文件:
FROM nginx:1.23.3-alpine
EXPOSE 80 443
# Copy in your SSL certs
# For when I test it with HTTPS
COPY certs/* /etc/nginx/ssl/localhost/
# Copy in your nginx config
COPY config/localhost.conf /etc/nginx/nginx.conf
# Copy in your landing page example
COPY static-html /usr/share/nginx/html
我的Docker合成文件
version: '3'
services:
my-nginx:
container_name: my-nginx
build: ./nginx/.
ports:
- "80:80"
- "443:443"
networks:
- my-network
my-test:
container_name: my-test
image: docker/getting-started
ports:
- "4444:80"
networks:
- my-network
networks:
my-network:
name: my-network
driver: bridge
我的nginx localhost.conf文件:
events {}
http {
server {
listen 80;
listen [::]:80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /tut/ {
proxy_pass http://my-test:80/;
}
}
}
1条答案
按热度按时间hgc7kmma1#
这个问题原来是Nginx的某种模式匹配RegEx?问题。不是真正的bug?不确定。
入门容器被设计为重定向到
/tutorial
并显示页面内容。日志上写着:
注意url路径:“/usr/share/nginx/html/orial/index.html”和“GET /orial/ HTTP/1.0”