部分配置模板
部分配置模板可在
nginx.conf.default配置文件下
常用指令
- ./nginx #启动nginx
- nginx -s stop #停止nginx
- nginx -s reload #重新加载配置文件
- nginx -s quit #安全退出nginx
反向代理配置
代理通过
listen,监听端口实现,所以配置反向代理时,需要注意端口是否被占用,如果需要查看端口,
linux中,netstat -ntulp | grep port,port是你需要查看的端口号
windows中,netstat -aon | findstr port,这里你会得到一些信息,我们需要最上面的即可端口中
80端口是配置http请求的,同时你的server_name需要的是一个域名或者ip端口
443端口是配置https请求的,同时需要配置ssl证书的密钥对,ssl证书可以到aliyun免费申请server { listen 443 ssl; server_name 域名; #配置ssl证书密钥对,这里需要你生成对应.crt和.key,并将其放到对应的目录下 ssl_certificate C:\WebServer\Certs\certificate.crt; ssl_certificate_key C:\WebServer\Certs\private.key; # 允许跨域请求的域,* 代表所有 add_header 'Access-Control-Allow-Origin' *; #允许请求的header add_header 'Access-Control-Allow-Headers' *; #允许带上cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; #允许请求的方法,比如 GET,POST,PUT,DELETE add_header 'Access-Control-Allow-Methods' *; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 rewrite ^(.*)$ https://$host$1; location / { } }
简单的反向代理配置
location /
{
proxy_pass http:xxx:port
autoindex on; # 开启浏览器浏览功能
}
location参数
location后面跟的参数
/表示的是项目根目录,即访问路径直接为服务器根地址/xxx匹配请求url中的字符串,匹配成功,则进入location- 更多匹配规则见官网
root和alias
- 在
location配置的root的路径最终效果为:总路径=root路径+location路径+请求资源- 在
location配置的alias的路劲最终效果为:总路径=alias路径+请求资源,相当于把location的路径拼接到原先的相应的root路径location的root会覆盖server中配置的rootalias的最后/不能省略,而root则可有可无
设置图片的映射
过滤所有的图片请求----当初被这个搞了好久,如果请求不了图片,记得把这段删除
location ~ .*\.(gif|jpg|jpeg|png)$ {
expires 24h;
root /data/www/images/;#指定图片存放路径,访问路径=>root+请求资源
access_log /data/www/images/nginx/logs/images.log;#图片 日志路径
proxy_store on;# 是否在本地磁盘缓存来自被代理服务器的响应数据,
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /data/www/images/;#代理临时路径
proxy_redirect off;
proxy_set_header Host 127.0.0.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://127.0.0.1:8088;#代理访问地址
}
}
proxy_pass
请求代理设置,
url可以是域名或者服务器地址,下面举两个例子来表示两种情况 总的请求路径为
http://www.tzfcw.top/images/1.jpg
例子1
location /images/
{
proxy_pass http://127.0.0.1:8080/ # 这种带最后加斜线的,最后总的路径为代理地址加`images`后面的url片段 即 http://127.0.0.1:8080/1.jpg
}
例子2
location /images/
{
proxy_pass http://127.0.0.1:8080 #像这样url后面不携带斜线的,最后总的url为 http://127.0.0.1:8080/images/1.jpg
}
负载均衡
upstream是集群配置,后面跟的集群的名称,下面的是backend,在server块里添加location,
- 每一个单点服务即
server,后面都可以添加权重weight=xx,不添加的话,默认权值相同backup定义的是备用服务器,- backup是指备份的意思,在Nginx的upstream中,backup参数是指将某个server标记为备用服务器。当所有非备用服务器都不可用时,请求将会被转发到备用服务器上
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=3;
server 192.0.0.1 backup;
}
server {
location / {
proxy_pass http://backend;# 后面的url接集群的名称
}
}
配置跨域
预检验请求
http请求包括:简单请求和跨域请求
简单请求不会触发CORS预检验请求(options),
满足以下规范视为简单请求:
使用下列方法之一
GET
POST
Content-type(仅当POST方法的content-type满足下列之一才视作简单请求)
text/plainmultipart/form-dataapplication/x-www-form-urlencodedHEAD
需要预检验的请求:
预检验请求首先会发送options请求,发送到服务端,来判断该请求是否可以跨域,可以避免跨域请求对服务器的用户数据产生未预期的影响。
满足下列条件视为需要预检验的请求
使用了下面任一的HTTP方法
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
人为设置了对 CORS 安全的首部字段集合之外的其他首部字段。该集合为:
Accept
Accept-Language
Content-Language
Content-Type
DPR
Downlink
Save-Data
Viewport-Width
WidthContent-Type的值不属于下列之一:
application/x-www-form-urlencodedmultipart/form-data
text/plain
#允许跨域请求的域,* 代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET,POST,PUT,DELETE
add_header 'Access-Control-Allow-Methods' *;
# 拦截options请求,直接返回200状态码
if ($request_method = 'OPTIONS') {
return 200;
}
Access-Control-Allow-Methods *预检验未通过
假设你的前端页面是example.com,你想向http://api.com发送一…
- Access-Control-Allow-Origin: example.com
- Access-Control-Allow-Methods: POST
- Access-Control-Allow-Headers: X-Custom-Header
- Access-Control-Allow-Credentials: true
这样,浏览器在发送预检请求后,会收到服务器的允许,并继续发出实际的POST请求。如果你把Access-Control-Allow-Methods设置为
*,那么浏览器会认为服务器不支持POST方法,而拒绝发送实际请求。如果不携带cookie,那么Access-Control-Allow-Methods设置为
*就可以允许任意方法的请求,因为*号会被当作通配符,而不是字面上的方法名。但是,这样做可能会有安全风险,因为你可能不想让任何来源的请求都能访问你的资源。所以,建议你还是指定具体的方法名,以增强安全性。
子配置文件
在nginx中有个主要的配置文件是nginx.conf,在nginx启动过程中会加载该配置文件,同时如果有子配置文件时会加载所有的子配置文件,子配置文件格式满足
=>
*.conf,需以.conf结尾同时配置文件内不需要
http模块,即http模块不能出现在配置文件中
配置时容易出现的问题
502 bad gateway
前端报502 bad gateway的原因及解决方案_ruanhongbiao的博客-CSDN博客
- 还有可能是你反向代理服务时,代理服务的协议出现错误,如本机的是http协议,代理服务却变成https协议