百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2025-01-29 17:26 17 浏览 0 评论

二级目录映射

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

如前端是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/

Bash
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访问,请参照如下配置。

Bash
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;

相关推荐

工程师必备!DeepSeek自动化运维全攻略

每天省出3小时,故障自修复+智能监控实战指南导语“总在深夜被报警短信吵醒?教你搭建智能运维体系,让DeepSeek自己管自己!”正文技能1:自动化故障诊断配置智能诊断规则:yaml复制alert_ru...

Spug - 轻量级自动化运维平台(自动化运维平台 devops)

对于中小型企业而言,进行主机和应用的管理是比较麻烦的,应用部署往往需要直接连接服务器,再进行手动的环境配置、代码拉取、应用构建和部署发布等工作,容易出错,且耗时费力。一个好的自动化运维平台,往往能大大...

轻量级无 Agent 的一个好用的“小麻雀”自动化运维平台工具!-Spug

对于中小型企业而言,进行主机和应用的管理是比较麻烦的,应用部署往往需要直接连接服务器,再进行手动的环境配置、代码拉取、应用构建和部署发布等工作,容易出错,且耗时费力。一个好的自动化运维平台,往往能大大...

运维自动化之实用python代码汇总(python自动化运维常用模块)

本文总结了运维工作中经常用到的一些实用代码块,方便在需要的时候直接搬过来使用即可1.执行系统命令,获取返回结果fromsubprocessimportPopen,PIPE,STDOUTcp...

从代码小白到自动化大师:Python 编程实战

昨天我聊了一下关于线性代数、概率统计、微积分核心概念的学习,也花了一些时间恢复一下大学时候学这些的记忆,确实来说数学很有趣也很考验人,兴趣是最好的老师对吧,既然对AI感兴趣,总要认真的学一学,接下来我...

锐捷:基于Python TextFSM模块的网络设备自动化运维方法

网络设备自动化运维,首先要实现网络设备与自动化运维平台对接,即通过代码实现登录网络设备并获取信息。邮政业科技创新战略联盟单位锐捷自主研发的数据中心交换机产品已全面支持NETCONF协议,可适用于和SD...

基于Python+vue的自动化运维、完全开源的云管理平台

真正的大师,永远都怀着一颗学徒的心!一、项目简介今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能基于RBAC权限系统录像回放DNS管理配置中心强大的作业调...

编程与数学:在Python里怎么用turtle库函数填色?

这里只给出一个示例,一个最简单的示例。看懂这个示例,你就能在自己的代码里需要填色的地方填色。首先,与前面发的Python绘画程序一样,先要装入turtle库。然后在代码中,下面需要填色时,先写一个填色...

Python UV 环境下的 PyKDL 运动学库安装

视频讲解:PythonUV环境下的PyKDL运动学库安装_哔哩哔哩_bilibilimujoco-learning这个仓库,改成uv管理环境依赖后,原来的一些包有些缺失,比如之前安装的PyKD...

python最新版3.11正式发布,有哪些新特色?(3/5)

异步任务的语法更完美python编程语言对异步编程的支持一直在改进,比如python2.0版开始就增加了生成器(generator),在3.4版开始增加了asyncio库,随后在3.5版中...

清华北大都在用!Python王者归来(全彩版)

纸上得来终觉浅,绝知此事要躬行。今天给大家带来一份由清华大学出版的《python王者归来》。在当下全民互联网,大数据的时代,Python已然成为了学习大数据、人工智能时代的首选编程语言,Python...

第六章:Python模块与包(python模块与包与类的关系区别)

6.1模块基础6.1.1理论知识模块是一个包含Python定义和语句的文件,其扩展名为.py。模块可以将代码组织成逻辑单元,提高代码的可维护性和复用性。通过将相关的函数、类和变量放在同一个模块中...

语言教育项目实战之一:Ubuntu下安装Python环境

如下项目,运行在#ubuntu#上,使用#pytho#,从最初环境开始,逐渐深入。此项目以语言学习为主要目的,实现听写、跟读、对话的服务,面向中小学生、大学生、涉外交流人员等。计划通过pyenv管...

openai-python v1.79.0重磅发布!全新Evals API升级,音频转录终极

2025年5月17日,OpenAI官方在GitHub上发布了openai-python库的最新版本——v1.79.0。本次版本重点围绕Evals评估API进行了多项功能完善,同时修复了音频转录接口的重...

你真的用对了吗?7个常被误用的Python内置函数及最佳实践

你是否曾经在使用多年的工具中突然发现一个新功能,然后感叹:“我怎么一直没发现这个?”没错,今天我们就来体验一把“Python函数版”的这种乐趣。这些函数很可能已经是你日常代码的一部分,但我敢打赌,你并...

取消回复欢迎 发表评论: