Linux系统Nginx服务(四)
一、Nginx 配置跨域 CORS
浏览器的同源策略会限制不同源之间的资源交互,Nginx 可以作为代理服务器解决跨域问题。
1.1 跨域的定义与限制
- 同源:协议、域名、端口三者均相同
- 跨域限制:
- 限制读取不同源的 Cookie、IndexDB、LocalStorage 等数据
- 限制不同源的 JavaScript 操作当前 DOM
- 限制 XMLHttpRequest 等方式向不同源发送数据
1.2 Nginx 解决跨域的原理
通过 Nginx 作为中间代理,使浏览器认为是与同源服务器交互,而 Nginx 实际将请求转发到目标服务器,从而绕过浏览器的同源策略限制。
1.3 跨域配置示例
假设前端域名为 fe.server.com
,后端接口域名为 dev.server.com
,配置如下:
bash
server {listen 80;server_name fe.server.com; # 与前端同源的域名location / {proxy_pass http://dev.server.com; # 转发到实际后端服务# 设置请求头proxy_set_header Host dev.server.com;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 设置跨域相关响应头add_header Access-Control-Allow-Origin http://fe.server.com;add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE;add_header Access-Control-Allow-Headers Content-Type,Authorization;}
}
二、Nginx 防盗链设置
防盗链用于防止其他网站盗用你的静态资源(如图片、CSS、JS 等),避免带宽浪费和资源滥用。
2.1 防盗链原理
基于 HTTP 协议的 Referer
头信息,该头信息记录了请求的来源页面。通过判断 Referer
信息,允许可信来源访问资源,拒绝非法来源。
2.2 防盗链核心配置
bash
valid_referers none | blocked | server_names | strings ....;
none
:允许没有Referer
的请求blocked
:允许Referer
不以http://
或https://
开头的请求server_names
:允许指定域名 / IP 的请求(白名单)
2.3 防盗链配置示例
bash
server {listen 80;server_name www.example.com;charset utf-8; # 支持中文# 对静态资源设置防盗链location ~* \.(js|css|png|jpg|gif)$ {# 允许自身域名和指定可信域名访问valid_referers www.example.com trusted.com;# 如果来源不合法,返回 403 错误if ($invalid_referer) {return 403;}root /usr/share/nginx/html;}
}
2.4 配置说明
- 防盗链配置需放在
location
块中,针对需要保护的资源类型进行设置 ~* \.(js|css|png|jpg|gif)$
表示匹配所有指定后缀的静态资源valid_referers
后可跟多个可信来源,用空格分隔$invalid_referer
是 Nginx 内置变量,当来源不在可信列表时为true