linux通过nginx映射指定目录文件给外部访问

文章讲述了如何修改Nginx配置文件以解决403权限错误和404找不到文件的问题。重点包括更改用户权限为root,理解master和worker进程,以及正确使用root和alias指令处理静态资源路径,特别是alias在处理静态目录时需要注意末尾的斜杠。

修改配置文件

#user www-data;
#将user www-data;注掉改为root
user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	#default_type application/octet-stream;
	#修改默认类型为json
	default_type  application/json;


	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;


	server {
		#配置跨域问题
  		add_header Access-Control-Allow-Origin *;
  		add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
  		add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
 
  		if ($request_method = 'OPTIONS') {
   			return 204;
  		}
        listen       80;
        server_name  localhost;
 		#该配置表示,自动拦截以/json/开头的请求,如果没有其他location的拦截配置能够符合该url,则命中该location。autoindex on表示开启文件索引,这样我们在浏览器输入文件目录url时,可以显示文件索引目录。最终访问的资源映射到了/root/目录。
        location /json/ {
   			default_type application/json;
   			autoindex on;
   			alias /root/json/;
			#root /root/json/;
        }
    }

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

修改配置文件后,重启nginx;
访问格式如下:
http://ip或域名:端口/json/xxxx.xxx

报403错误

拒绝访问。那么是权限问题;
根据Nginx的官方文档,Nginx程序有两种进程:

一种是master process,即主进程,系统中只有一个。主进程的主要目的是读取和评估配置文件,以及维护工作进程。

一种是worker process,即工作进程,系统中可以有多个。工作进程执行请求的实际处理。 NGINX依赖于依赖操作系统的机制来有效地在工作进程之间分配请求。工作进程数由nginx.conf配置文件中的worker_processes指令定义,可以设置为固定数字,也可以配置为自动调整为可用CPU核心数。
使用下边命令直接查看系统中的Nginx进程:

ps aux|grep nginx|grep -v grep

在这里插入图片描述
看到一个master,和一个worker。然后master的权限为root,worker的权限为www-data。
解决办法将nginx的配置文件改为root,如下:
1、在/etc/nginx/nginx.conf的头部,有行user www-data,将www-data改成root。可以通过HTTP访问上传保存在/root/json中的文件了。
在这里插入图片描述
2、将你要访问的文件放入www-data可以访问的文件夹下,并将下边的文件拥有者改为www-data。

静态资源报404错误

所有文件存放在/root/json/下;

 location /json/ {
   			default_type application/json;
   			autoindex on;
			root /root/json/;
        }

root配置会在配置的目录后跟上URL,组成对应的文件路径,即想访问的地址是:

https://xxxxx/json/a.json

nginx根据配置走的文件路径是

/root/json/json/a.json

正确的路径是

/root/json/a.json

Nginx提供了另外一个静态路径配置:alias配置

官方root配置

Sets the root directory for requests. For example, with the following configuration
location /i/ {root /data/w3;
}
The /data/w3/i/top.gif file will be sent in response to the “/i/top.gif” request

官方alias配置

Defines a replacement for the specified location. For example, with the following configuration
location /i/ {alias /data/w3/images/;
}
on request of “/i/top.gif”, the file /data/w3/images/top.gif will be sent.

当访问/i/top.gif时,root是去/data/w3/i/top.gif请求文件,alias是去/data/w3/images/top.gif请求,也就是说

root响应的路径:配置的路径+完整访问路径(完整的location配置路径+静态文件)

alias响应的路径:配置路径+静态文件(去除location中配置的路径)

解决办法:

 location /json/ {
   			default_type application/json;
   			autoindex on;
			alias /root/json/;
        }

注意:使用alias时目录名后面一定要加“/”;一般情况下,在location/中配置root,在location /*中配置alias。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值