nginx在windows下的常用命令
准备事项:
# 常用的nginx命令
# 查看Nginx的版本号:nginx -V
# 启动Nginx:start nginx 或者 nginx
# 快速停止或关闭Nginx:nginx -s stop
# 正常停止或关闭Nginx:nginx -s quit
# 配置文件修改重装载命令:nginx -s reload
# 查看windows任务管理器下Nginx的进程命令:tasklist /fi "imagename eq nginx.exe"
# 终止进程 taskkill /F /pid 252288
报跨域的错误
这里穿插了处理跨域的几个常用的方法:
- 后端处理,在响应头拼入 Access-Control-Allow-Origin 等属性,是浏览器制定的解决跨域的方式也叫做CORS
// 设置允许跨域的域名,*代表允许任意域名跨域
res.header('Access-Control-Allow-Origin', '*');
//允许的header类型
res.header('Access-Control-Allow-Header', "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
- nginx服务器端处理
nginx是个代理服务器
首先要配置反向代理:(proxy_pass属性),由反向代理服务器去选择目标服务器获取数据后返回给浏览器
然后就跟上面一样:
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;
}
- 还要jsonp就是很简单的绕过同源策略,利用script标签不受同源政策的限制,像后端传一个回调函数,后端把要用的东西拼入回调函数里。但是可想而知这是不方便且不安全的。只能使用get请求,还容易收到xss攻击,所以就不细说了。
配置了反向代理之后报错403
来到正题了,因为跨域我是在后端处理的,所以配置了反向代理就可以了,但是配置了反向代理之后,请求页面资源时直接报错403,网上有好几种解法:分别是增加nginx配置,权限问题,后端处理等等等。
但是都跟我的情况不一样,我的情况就非常简单且白痴。如果有遇到的朋友们可以参考。
问题点:
我直接把反向代理地址,配置到location / 里面了,导致第一步请求页面的时候直接去服务器端请求,而不是在代理服务里请求,所以没有token403,而且请求不到资源。
解决
location 匹配规则
首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中出现的顺序,来逐个正则匹配。
然后匹配不带任何修饰的前缀匹配。
最后是交给 / 通用匹配
当有匹配成功时候,停止匹配,按当前匹配规则处理请求
【也就是如下方式】
location ^~ /api/ {
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://127.0.0.1:3001;
}
nice,解决了
server_name
server_name就是访问部署了nginx那台服务器的域名、ip、localhost。