nginx配置静态资源映射和反向代理

将文件上传

前端的静态文件一般是在/var/www这个目录下,其他文件夹nginx可能没有读的权限

修改nginx的配置文件

sudo vim /etc/nginx/nginx.conf

在http作用域下添加

server {
    listen  80;
    server_name 47.103.198.84;
	location / {
		root /var/www/feidian/feidian/;
		index index.html;
	}
}

配置文件解释:

  • server无需解释
  • listen表示监听哪个端口,当访问页面的时候默认访问80端口,因此这里不用改
  • server_name是你的服务器地址
  • location是访问的格式
  • /表示直接访问网站就进行映射
  • root是你的静态资源在那个目录
  • index是你的静态资源在映射的目录钟名称叫什么

注意:写成root,则会在root目录下拼接location,写成alias就不会,修改配置和重启的时候记得使用sudo命令

重启nginx

sudo nginx -s reload

权限问题

当文件不在/var/www目录下,文件的读写权限不在nginx,需要修改文件访问权限

  • /data是你的文件夹路径
  • -R表示这里面所有的文件(递归)
  • 777表示所有用户可修改
chmod -R 777 /data

一般nginx监听配置

server {
        listen       9005;
        server_name  192.168.0.5;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
        	proxy_pass  http://127.0.0.1:8080; # 转发规则
            root   D:/hospitalPage/dist;
            index  index.html index.htm;
			#limit_rate 1280k; #限制速度
			client_max_body_size  100M;
			allow all;
            autoindex on;
			proxy_set_header X-Real-IP  $remote_addr;
			proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			add_header 'Access-Control-Allow-Headers' 'Content-Type';
            add_header 'Access-Control-Allow-Methods' 'GET';
            add_header 'Access-Control-Allow-Methods' 'POST';
            add_header 'Access-Control-Allow-Methods' 'DELETE';
			add_header 'Access-Control-Allow-Methods' 'PUT';
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Origin' '*';
			proxy_connect_timeout       600s;
            proxy_read_timeout          600s;
            proxy_send_timeout          600s; 
            access_log off;
			break;
        }
				       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
     
    }

nginx代理后刷新显示404

原因是因为web单页面开发模式,只有一个index.html入口,其他路径是前端路由去跳转的,nginx没有对应这个路径,当然就是404了。

解决方法是:在配置中加上try_files,意思跟翻译差不多,“尝试读取文件”。try_files $uri $uri/ /index.html;修改配置如下

1、如果是在根目录则配置如下

location / {
  root  /;
  index index.html;
  try_files $uri $uri/ /index.html
  	# 下面配置省略,同第二步
}

2.如果是有特定目录

location /xx/xx/ {
  root  /;
  index index.html;
  try_files $uri $uri/ /xx/xx/index.html
  	# 下面配置省略,同第二步
}
例如:
	location /payfor/ {
		root /home/web;
		index index.html;
		try_files $uri $uri/ /payfor/index.html;
      	# 下面配置省略,同第二步
	}


反向代理

我们想把/video开头的请求转发到2004端口上去,如果http://127.0.0.1:2004/最后加上/则不会拼接。如果不加则会进行拼接

例如我们访问http://xxxx/video/index,如果在最后不加/的话就会向2004端口请求/video/index接口,如果在最后加了/则是去访问/index接口

location /video/ {
    proxy_pass  http://127.0.0.1:2004/; # 转发规则
}

版权声明:本文为m0_46521785原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。