干掉nginx 403 forbidden报错

liuzhen007 等级 597 0 0

目录

问题

解决

  1. 设置启动用户owner

  2. 切换管理员模式

  3. 开放访问目录权限

  4. 明确index索引文件

问题

按照网上的教程,我们顺利启动了默认80端口的nginx服务。

具体安装教程可以参考:https://liuzhen.blog.csdn.net/article/details/83898155

接下来,我们开始将它修改成自己的静态服务,但是遇到了“nginx 403 forbidden”的报错。

解决

首先需要说明一下mac和linux的nginx配置文件的位置略有不同,具体情况如下:

mac:/usr/local/etc/nginx/nginx.conf

linux:/etc/nginx/nginx.conf

好了,开始我们坎坷的一路吧:

修改配置后,重新启动nginx服务:

sudo nginx -s reload

报错:

nginx: [emerg] bind() to 0.0.0.0:8066 failed (48: Address already in use) #tcp_nopush on; nginx: [emerg] bind() to 0.0.0.0:8066 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:8066 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:8066 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:8066 failed (48: Address already in use) nginx: [emerg] still could not bind()

自己以为很简单,不就是端口占用了嘛,查找对应的进程:

localhost:nginx lz$ lsof -i:8066 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Google 31199 lz 33u IPv4 0x44b485117ae7339 0t0 TCP localhost:62265->localhost:8066 (ESTABLISHED) Google 31199 lz 34u IPv4 0x44b48510e8b1de9 0t0 TCP localhost:62266->localhost:8066 (ESTABLISHED)

原来元凶是31199,那就干掉它吧。

localhost:nginx lz$ kill 31199 localhost:nginx lz$ kill 31199 -bash: kill: (31199) - No such process

通过上述的结果,说明第一次确实杀掉31199了。

这时神奇的现象出现了,我刷新页面,服务还能访问????

再次查看8066端口,居然还有进程存在:

localhost:nginx lz$ lsof -i:8066 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Google 71351 lz 18u IPv4 0x44b485117694179 0t0 TCP localhost:62488->localhost:8066 (ESTABLISHED) Google 71351 lz 22u IPv4 0x44b4851157d2971 0t0 TCP localhost:62489->localhost:8066 (ESTABLISHED)

那么问题来了,意思是对应的nginx进程杀不掉吗?

那就尝试停止服务命令关闭nginx:

sudo nginx -s stop

结果却报错了:

nginx: [alert] kill(1668, 1) failed (3: No such process)

同时,页面也不能访问了,出现了403。

于是开始了疯狂尝试。。。

1. 设置启动用户owner

在nginx.conf配置文件首行增加用户权限声明,注意不要丢了分号。

user root owner;

2. 切换管理员模式

sudo su

输入密码完成切换,再执行相关命令。

3. 开放访问目录权限

如果访问的目录没有对应的权限,也会出现403报错。

所以尝试了如下方式,但是本人遇到的不是这个问题。

chmod -R 777 /Users/lz/job/resource

4. 明确index索引文件

本来想实现最简单的静态服务,可以直接访问所有文件和目录列表,自己将index配置项改成了.。但是,这样就导致了403的问题。

后来明确index索引文件后,问题消失。

location / { root /Users/lz/job/resource; index index.html index.htm; }

遇到报错时,我们可以通过借助日志定位一部分问题,如果不知道日志的存储路径,可以使用如下命令:

nginx -V

注意:V是大写的,小写的是显示版本号。

实际对比效果如下:

localhost:nginx lz$ nginx -v nginx version: nginx/1.19.5 localhost:nginx lz$ nginx -V nginx version: nginx/1.19.5 built by clang 12.0.0 (clang-1200.0.32.27) built with OpenSSL 1.1.1h 22 Sep 2020 (running with OpenSSL 1.1.1i 8 Dec 2020) TLS SNI support enabled configure arguments: --prefix=/usr/local/Cellar/nginx/1.19.5 --sbin-path=/usr/local/Cellar/nginx/1.19.5/bin/nginx --with-cc-opt='-I/usr/local/opt/pcre/include -I/usr/local/opt/openssl@1.1/include' --with-ld-opt='-L/usr/local/opt/pcre/lib -L/usr/local/opt/openssl@1.1/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/run/nginx.lock --http-client-body-temp-path=/usr/local/var/run/nginx/client_body_temp --http-proxy-temp-path=/usr/local/var/run/nginx/proxy_temp --http-fastcgi-temp-path=/usr/local/var/run/nginx/fastcgi_temp --http-uwsgi-temp-path=/usr/local/var/run/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/var/run/nginx/scgi_temp --http-log-path=/usr/local/var/log/nginx/access.log --error-log-path=/usr/local/var/log/nginx/error.log --with-compat --with-debug --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-ipv6 --with-mail --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module

因此,我们可以非常轻易的找到对应的错误日志路径 :/usr/local/var/log/nginx/error.log。

收藏
评论区

相关推荐

nginx安全配置
安全是一个重要的问题,必须引起注意。 1. nginx介绍 nginx本身不能处理PHP(http://www.ttlsa.com/php/ "php"),它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fastcgi管理进程选择cgi子
bind、call、apply 区别?如何实现一个bind?
一、作用 call、apply、bind作用是改变函数执行时的上下文,简而言之就是改变函数运行时的this指向 那么什么情况下需要改变this的指向呢?下面举个例子 var name"lucy"; const obj{     name:"martin",     say:function () {         co
nginx配置系列-日志切割
nginx配置系列日志切割 背景 nginx日志中我们希望日志能够每天或者每小时自动切割,nginx本身没有提供自动切割的机制,但是我们可以通过脚本或者稍加改造让其具备这种能力。下面让我们看看怎么操作吧。 日志切割 常见做法有四种,在我们做之前我们来学习一下nginx日志中常用的内置变量字段都是什么意思 nginx内置变量
NGINX的 IF AND 和 OR
if的逻辑用法 什么是逻辑用法呢, 就程序中的and、or关系, 就叫做逻辑了. NGINX支持if的 and 与 or 或者 && 与 || 吗? 答案是No. 当你尝试这样配置, 重载nginx时, nginx会报出错误 location /test/ { default_type text/html;
干掉nginx 403 forbidden报错
目录问题解决1. 设置启动用户owner2. 切换管理员模式3. 开放访问目录权限4. 明确index索引文件 问题按照网上的教程,我们顺利启动了默认80端口的nginx服务。具体安装教程可以参考:https://liuzhen.blog.csdn.net/article/details/83898155接下来,我们开始将它修改成自己的静态服务,但是遇到
Kubernetes Ingress — NGINX
在 Kubernetes 中,Service 是一种抽象的概念,它定义了每一组 Pod 的逻辑集合和访问方式,并提供一个统一的入口,将请求进行负载分发到后端的各个 Pod 上。Service 默认类型是 ClusterIP,集群内部的应用服务可以相互访问,但集群外部的应用服务无法访问。为此 Kubernetes 提供了 NodePorts,LoadBalan
Kubernetes Ingress — Kong
Kong 是由 Mashape 公司开源的一个高性能、高可用、易扩展的 API Gateway 项目,基于OpenResty(Nginx Lua模块),并提供了插件实现 API 的 AOP 功能。可以通过负载均衡、插件扩展等方式,来处理网络请求。 Kong 主要的概念Servi
Nginx 中使用 map 解决多来源跨域问题
map 中需注意,如果存在多个配置文件,不能使用相同的变量名,故这里示例为 $allow_origin_Abash 在 server 上方添加 mapmap $http_origin $allow_origin_A { default ""; "~^(https?://localhost(:\d)?)" $1; "
全栈进阶:Nginx基本功能及其原理
<div class"output_wrapper" id"output_wrapper_id" style"fontsize: 16px; color: rgb(62, 62, 62); lineheight: 1.6; wordspacing: 0px; letterspacing: 0px; fontfamily: 'Helvetica
前端也要懂 - 带你全面认识 Nginx
前言作为一名前端开发人员,你是不是经常碰到领导让你上服务器去修改 Nginx 配置,然而你会以“我是前端,这个我不会”为理由搪塞过去呢!今天就让我们一起告别这种尴尬,向“真正”的程序员迈进!!!Nginx 概述 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 \ 24 小时不间
nginx根据url中的参数做代理转发
功能: 一个nginx代理转发,代理目标地址来自url中的host参数 location /   errorpage 418 @other;  recursiveerrorpages on;  resolver 1.2.4.8;  set $host '';  if ($querystring host(http(s)?:\/\/[^\/]+(.com|
实测Tengine开源的Dubbo功能
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 背景 Tengine是阿里巴巴基于Nginx开发并开源的Web服务器,它继承了Nginx所有的功能和特性,并在其基础上做了大量的扩展和增强,其中像动态模块加载,四层负载均衡,reuseport支持等能力,都逐渐被Nginx官方吸收引用。Tengine在开
OpenResty入门
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 OpenResty介绍 OpenResty通过汇聚各种设计精良的 Nginx模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动
前端容易理解错的跨域原理
前言关于跨域这件事,自从我遇到后,了解一下,这事就过去了。我也一直认为这是个小问题,大家应该都懂。直到我要教妹妹前端时遇上这个问题才发现,这个问题得整个逻辑讲出来其实还挺绕的。知道问题怎么解决很简单,但是要讲清楚问题为什么出现就十分复杂了。那么我突然就好奇了,大家是都懂这个逻辑了嘛。所以我在几个交流群里问了一个问题 为什么很多人都出现本地环境会跨域而线上环境
重磅!这份笔记连阿里P8面试官都说太详细了
一、Spring Boot 相关(1)SpringBoot 面试专题 什么是 Spring Boot? Spring Boot 有哪些优点? 什么是 JavaConfig? 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? Spring Boot 中的监视器是什么? 如何在 Spring Boot 中禁用 Act