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', '*');
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。
|