Nginx常用经典配置|反向代理、HTTPS 重定向、端口转发
二级目录映射目前前后端项目分离的场景比较多,一般是前端一个端口,后端一个端口。 如果前端是https://example.com/index.html,调用的接口是https://example.com:4433 这样的部署对于小型项目来说可能会比较麻烦,但是在公网环境下也可以选择使用子域名或者其他域名进行跨域访问。 这是同一个域名,同一个端口,这样前后端就可以同时访问服务了。 前端地址:htt
二级目录映射目前前后端项目分离的场景比较多,一般是前端一个端口,后端一个端口。
如果前端是https://example.com/index.html,调用的接口是https://example.com:4433
这样的部署对于小型项目来说可能会比较麻烦,但是在公网环境下也可以选择使用子域名或者其他域名进行跨域访问。
这是同一个域名,同一个端口,这样前后端就可以同时访问服务了。
前端地址:https://example.com/index.html
接口地址:https://example.com/api/
这里先记录下我是如何在不改变原有服务器配置的情况下测试通过反向代理的。直接重定向example.com/api到example.com:4443/
位置 ^~ /api/ {
proxy_pass https://example.com:4433/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
值得一提的是,location段的^~代表一个字符在开头匹配,匹配的URL规则以/api/开头
这里不能写~,因为~是正则匹配,所以不能再在proxy_pass段中配置URI,所谓的URI是在4433端口之后。
如果不写/,访问example.com/api/index.php时,代理到example.com:4433/api/index.php。无法定位到后端的根路径,所以这以/结束
非标准 HTTPS 端口重定向 如果您希望您的非标准 HTTPS 端口(例如 2083)支持 HTTP 跳过 HTTPS 访问,请参见下面的配置。
error_page 497 https://$host:2083$request_uri;
如果没有,默认情况下,当用户不确定站点协议时,使用 HTTP 协议访问您的 HTTPS 站点将导致无法访问。
错误如:普通 HTTP 请求被发送到 HTTPS 端口
HTTP Force Jump HTTPS Daily 为了保证访客安全,我们经常需要在整个站点保持 HTTPS 访问,所以可以如下配置。
服务器{
监听 80 default_server;
server_name example.com;
重写 ^(.*) https://$server_name$1 永久;
#上面的rewrite也可以这样写
返回 301 https://$host$request_uri;
}
服务器{
听 443 ssl;
server_name example.com;
}
通过这样做,所有 80 监听的 HYPERlink 都被重定向到 HTTPS 端口。
HSTS 策略保持 HTTPS 连接同时,您可以通过打开 HSTS 策略来强制访问者浏览器继续使用 HTTPS 链接,添加以下代码:
-
add_header Strict-Transport-Security "max-ageu003d31536000; includeSubDomains;preload" always;
-
max-age:设置单位时间(秒)强制HTTPS连接,这里为一年
-
IncudeSubDomains:可选,站点的所有子域同时生效
-
Preload:可选,非规范值,用于定义HSTS预加载列表的使用
-
always:可选,确保所有响应都发送这个响应头,包括各种内置的错误响应
Nginx反向代理 反向代理的场景很多,比如前后端统一域名端口,比如负载均衡。
位置 / {
proxy_pass http://example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
全参数配置
zoz100027`
位置 / {
proxy_pass http://example.com;
proxy_redirect 关闭;
proxy_set_header 主机 $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream 错误超时 invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
端口转发 Nginx 端口转发功能也很强大,可以用于内网数据库等服务端口暴露的场景。
比如内网的192.168.1.2 MySQL数据库端口通过Nginx所在服务器的33062端口暴露出来。
上游 TCP3306 {
哈希 $remote_addr 一致;
服务器 192.168.1.2:3306;
}
服务器{
听 33062;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass TCP3306;
}
更多推荐
所有评论(0)