修改配置文件
#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。