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;
}
}