Nginx是怎么解决跨域问题的
跨域问题:
具体来说是浏览器如果向一个地址不同,或者端口号不同的链接发送请求,那么浏览器会禁止这种请求。
Nginx解决跨域问题,主要的方法是反向代理,何为正向代理,何为反向代理?
正向代理:
正向代理代理客户端,如果我们想要访问某个网站,但是该网站无法直接访问,那我们可以通过某个服务器的正向代理,来间接访问该网站,其中最典型的例子就是VPN
反向代理:
反向代理代理服务器,即你想要访问网站A,但网站A实际上会跳转到网站B,但是用户并不清楚,用户只认为自己访问了网站A,这就可以称网站A反向代理了网站B。
总结
其实不仅仅是用户不知道自己访问的是网站B,浏览器也察觉不到,在浏览器的视角里,它是对自己的IP和端口发送了请求,这样并不会违反浏览器的跨域规则,然而实际上发送的请求都被转发到真正的后端服务器上的了,跨域问题就这样解决了。
附上nginx反向代理的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| worker_processes 1;
events { worker_connections 1024; }
http { include mime.types; default_type application/json;
sendfile on; keepalive_timeout 65;
server { listen 8082; server_name localhost; # 指定前端项目所在的位置 location / { root html/hmdp; index index.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
location /api { default_type application/json; #internal; keepalive_timeout 30s; keepalive_requests 1000; #支持keep-alive proxy_http_version 1.1; rewrite /api(/.*) $1 break; proxy_pass_request_headers on; #more_clear_input_headers Accept-Encoding; proxy_next_upstream error timeout; proxy_pass http://127.0.0.1:8081; #proxy_pass http://backend; } }
upstream backend { server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1; #server 127.0.0.1:8082 max_fails=5 fail_timeout=10s weight=1; } }
|