当前位置:首页 > 技术文章 > 正文内容

Nginx常用经典配置|反向代理、HTTPS重定向、端口转发

arlanguage5个月前 (12-17)技术文章35

二级目录映射

目前前后端项目分离场景多了以后,一般是前端一个端口,后端一个端口。

如前端是https://example.com/index.html,调用的接口是https://example.com:4433

如此部署对于一些小项目未免有些麻烦,当然你在公网环境下也可以选择使用子域名、其他域名进行跨域访问。

这里说的是同一个域名,同一个端口,让前后端同时进行访问服务。

前端地址:https://example.com/index.html

接口地址:https://example.com/api/

这里先记录我已经测试通过的反向代理的方式,即不改变原本的server配置。直接通过反向代理将example.com/api 重定向到 example.com:4443/

location ^~ /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;
}

nginx

Copy

值得一提的是,location段的^~是代表某个字符作为开头匹配,这里就是以/api/作为开头进行匹配URL规则。

这里不能写作~,因为~是正则匹配的意思,用了正则就不能再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;

nginx

Copy

如果不这么配置,默认当用户不确定网站协议时,采用了HTTP协议访问你的HTTPS网站就会出现无法访问。

错误如:The plain HTTP request was sent to HTTPS port

HTTP强制跳转HTTPS

日常为了保证访客安全性,我们常常需要让全站保持HTTPS访问,那么你可以通过以下配置。

server {
        listen 80 default_server;
        server_name example.com;
        rewrite ^(.*) https://$server_name$1 permanent;
        #上面的rewrite也可以写作
        return 301 https://$host$request_uri;
}
server {
        listen 443 ssl;
        server_name example.com;
}

Bash

Copy

做法是,让80监听到的HTTP链接全部重定向到HTTPS端口中。

HSTS策略保持HTTPS连接

与此同时,你也可以通过开启HSTS策略强制让访客浏览器保持使用HTTPS链接,添加如下代码:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;

nginx

Copy

  • max-age:设置单位时间(秒)内強制使用 HTTPS 连接,这里为1年
  • includeSubDomains:可选,站点所有子域同时生效
  • preload:可选,非规范值,用于定义使用『HSTS 预加载列表』
  • always:可选,保证所有响应都发送此响应头,包括各种內置错误响应

Nginx反向代理

反向代理的场景很多,例如前面的前后端统一域名端口,例如负载均衡等。

location / {
    proxy_pass  http://example.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

nginx

Copy

完整参数配置

location / {
    proxy_pass  http://example.com;
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_next_upstream error timeout 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

Copy

端口转发

Nginx端口转发性能也非常强大,可以用于内网数据库、其他服务端口外露的场景。

如将内网的192.168.1.2MySQL数据库端口通过Nginx所在服务器的33062端口进行外露。

upstream TCP3306 {
    hash $remote_addr consistent;
    server 192.168.1.2:3306;
}

server {
    listen 33062;
    proxy_connect_timeout 5s;
    proxy_timeout 300s;
    proxy_pass TCP3306;
}

nginx

Copy

限制访问IP

可以通过 ngx_http_access_module 允许限制某些IP地址的访问。

比如仅允许内网 IP 访问管理后台页面。

location /admin {
    allow 192.168.1.0/24;
    allow 10.0.0.0/24;
    deny all;
}

nginx

Copy

其中的 192.168.1.0/24 和 10.0.0.0/24 皆为允许访问的 IP。默认从上而下依次匹配规则,如果匹配不中前面的内网IP,则默认命中最后的拒绝访问。

过滤请求类型

如果你已经明确知道你的网站只有 GET、POST、HEAD 这三种请求,其他请求完全用不到,则可以通过如下方式直接屏蔽掉。

if($request_method !~ ^(GET|HEAD|POST)$) {
    return404;
}

nginx

Copy

Timeout设置

有时候,为了优化一些网站性能,可以将超时时间设置低一些,来降低死链接。

http {

    client_body_timeout 10;
    client_header_timeout 30;
    keepalive_timeout 30 30;
    send_timeout 10;

}

Bash

Copy

关闭Nginx版本号

当用户请求返回数据中不包含具体的nginx版本号,避免一些版本漏洞被猜解。

server_tokens off;

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/269.html

分享给朋友:

“Nginx常用经典配置|反向代理、HTTPS重定向、端口转发” 的相关文章

Nginx配置文件详解

Nginx配置文件详解Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设...

Nginx的location里面的root、alias的使用技巧与区别

1. 介绍1.1 介绍福哥在将TFLinux的PHP+Apache的组合转换成PHP+FPM+Nginx的过程里遇到了一个问题,就是Apache的虚拟主机转为Nginx里面的虚拟主机的时候参数怎么解决呢?今天福哥就将Nginx配置文件里面的location、root、alias的使用技巧给大家做一个...

nginx支持跨域的方法 nginx配置支持跨域

在nginx的配置文件中添加允许跨域的响应头。参考nginx官方文档,添加响应头的方法如下:在conf文件的server作用域中添加如下响应头:server { listen 80; # 其他配置... # 允许跨域 add_header Access-Control-Allow-...

基于 consul + nginx 的Spring boot微服务集群部署

consul + nginx 负载均衡最近做的基于consul的微服务项目,仅仅在单机上部署了一套,压测的时候扛不住(并发太高的时候linux文件连接数超过上限),于是想办法搞个集群部署。最终在我们的服务器的三台机器(mirage05-mirage07)上完成部署。一. 背景介绍以及项目现状1. c...

网站加载慢?让你的网站腾飞起来,LiteSpeed部署

说起LiteSpeed 还得说起我的小站,<开心洋葱网>,虽然流量不大,但是访问是真的慢,无奈经费有限,那就只能在服务器加速上动起心思来。之前一直听说 QUIC 访问网站的速度会让你感觉飞起来,那就搞下吧。我们先来看下 QUIC 、LiteSpeed都是些做什么的?QUIC(Quick...

如何找出爬取网站的来源IP? 爬取网站源代码

1.背景最近网站数据库性能很不稳定,查询性能在某段时间很慢,服务器CPU也很高,平常时间很低,感觉被爬虫恶意搞了,因此我分析了一下最近的nginx访问日志2.方法找出访问量最大20个ip[root@100 nginx]# cat liuhaihua.access.log | awk -F "...