成功解决:windows配置nginx引发的访问403/404问题

项目场景:

安装好nginx之后,可以正常访问nginx的首页,但是修改nginx.conf后,再次访问出现404或者403错误


问题描述:

修改配置文件


原因分析:

出现404错误,一般是文件的路径确实找不到
出现403错误,一般是文件的路径没有权限


解决方案:

首先记住路径最好使用 / 不要使用 \ , 其次路径的最末尾记得加上/ ,最后有分号。写错了记得改回来。
下面是正确例子:
在这里插入图片描述
报错时,可以查看error.log日志信息。里面有较为详细的说明
在这里插入图片描述
一定记得看配置文件的路径能否访问,最简单方法,在浏览器或者windows文件夹中输入路径即可

修改配置文件后,记得保存,记得重启nginx,重启命令,记得切换到nginx目录
在这里插入图片描述

[root@iZ2ze3k6buohug6id3eg97Z nginx]# docker logs -f nginx /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2025/03/24 05:22:21 [error] 31#31: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 117.189.228.151, server: 182.92.154.131, request: "GET / HTTP/1.1", host: "182.92.154.131" 117.189.228.151 - - [24/Mar/2025:05:22:21 +0000] "GET / HTTP/1.1" 500 579 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" 2025/03/24 05:22:22 [error] 31#31: *1 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 117.189.228.151, server: 182.92.154.131, request: "GET /favicon.ico HTTP/1.1", host: "182.92.154.131", referrer: "http://182.92.154.131/" 117.189.228.151 - - [24/Mar/2025:05:22:22 +0000] "GET /favicon.ico HTTP/1.1" 500 579 "http://182.92.154.131/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" ^C [root@iZ2ze3k6buohug6id3eg97Z nginx]#
最新发布
03-25
<think>嗯,用户给了我这个docker logs的输出,需要我帮忙解释一下。让我先仔细看看日志内容。首先,用户执行了docker logs -f nginx,显示的是Nginx容器的启动日志和访问错误信息。 日志开头是/docker-entrypoint.sh的执行过程,这部分看起来是正常的配置步骤。比如处理IPv6监听、环境变量替换和调整worker进程数。然后提示配置完成,准备启动。这些信息说明容器启动时的初始化步骤没有问题。 接下来是错误信息:出现了500错误,提示“rewrite or internal redirection cycle while internally redirecting to "/index.html"”。这个错误通常是因为Nginx配置中的重定向规则出现了循环,导致请求无法正确解析,最终返回500内部服务器错误。错误发生的客户端IP是117.189.228.151,请求的是根路径/和/favicon.ico,使用的浏览器是Chrome。 用户可能需要解决这个重定向循环的问题。我需要引导他们检查Nginx配置文件,特别是关于重写规则或者try_files指令的部分。常见的问题可能是在try_files中错误地指定了index.html,导致循环重定向。例如,配置中可能有类似try_files $uri $uri/ /index.html;,但如果没有正确处理,可能会引发循环。 另外,用户可能需要确认他们的静态文件是否存在,比如index.html是否在正确的目录下。如果文件存在,但配置有误,Nginx依然会尝试重定向,导致循环。还有,检查server块中的location配置是否正确,是否有重复的重写规则。 用户可能不太清楚如何进入容器内部查看配置文件,或者如何修改配置后重新加载Nginx。可能需要指导他们使用docker exec命令进入容器,检查/etc/nginx/conf.d/default.conf文件,或者将本地的配置文件挂载到容器中以便修改。 另外,测试配置文件的正确性也是关键步骤,可以用nginx -t命令来检查语法是否正确。如果有错误,根据提示进行修正,然后重启容器。 总结一下,用户的问题在于Nginx配置导致的重定向循环,需要检查相关配置,特别是try_files和rewrite规则,确保没有无限循环的情况。同时,确认静态资源的存在和路径正确性。如果用户按照这些步骤排查,应该能解决问题。</think>这是Nginx容器日志的详细分析及解决方案: 一、容器初始化阶段(正常流程) $$ \begin{aligned} &1.\ \text{检测到/docker-entrypoint.d/目录有配置脚本}\\ &2.\ \text{顺序执行配置脚本:}\\ &\quad \text{• 启用IPv6监听(10-listen-on-ipv6-by-default.sh)}\\ &\quad \text{• 模板变量替换(20-envsubst-on-templates.sh)}\\ &\quad \text{• 自动优化worker进程数(30-tune-worker-processes.sh)} \end{aligned} $$ 二、错误核心信息 ```log rewrite or internal redirection cycle while internally redirecting to "/index.html" ``` 数学表达:设重定向次数为$n$,当$n \to \infty$时触发循环保护机制,返回500错误 三、错误诊断流程 1. **配置循环检查** - 检查`try_files`指令是否形成环路,例如: ```nginx location / { try_files $uri $uri/ /index.html; } ``` 当所有路径都指向index.html时可能形成死循环 2. **路由规则验证** - 使用公式验证重定向次数:设初始请求为$r_0$,若存在$r_{n+1} = f(r_n)$,当$r_{n} = r_{n+1}$时即构成循环 3. **静态资源验证** $$ \exists\ \text{index.html}\ \text{in}\ /usr/share/nginx/html/\ ? $$ 四、解决方案步骤 1. **进入容器检查配置** ```bash docker exec -it nginx bash cat /etc/nginx/conf.d/default.conf ``` 2. **典型错误配置修正示例** ```diff location / { - try_files $uri $uri/ /index.html; + try_files $uri $uri/ /index.html =404; } ``` 3. **日志实时监控验证** ```bash docker logs -f --tail=50 nginx ``` 五、补充建议 - 使用配置校验命令: ```bash docker exec nginx nginx -t ``` - 文件存在性验证公式: $$ P(\text{file\_exists}) = \begin{cases} 1 & \text{if } \exists /usr/share/nginx/html/index.html \\ 0 & \text{otherwise} \end{cases} $$ 建议优先检查Nginx配置文件中的`try_files`指令和`rewrite`规则,确保至少有一条最终终止条件(如直接返回文件或明确状态码)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值