使用Nginx做反向代理

news2025/1/15 13:14:05

使用Nginx做反向代理

文章目录

  • 使用Nginx做反向代理
    • 代理HTTP请求
    • 代理HTTPS请求
      • 举个大栗子

代理HTTP请求

按照以下步骤使用Nginx做反向代理:

  1. 编辑 Nginx 的配置文件。默认情况下,Nginx 的配置文件位于 /etc/nginx/nginx.conf

    sudo nano /etc/nginx/nginx.conf
    
  2. 在配置文件中的 http 段中添加以下内容:

    server {
       listen 80;
       server_name yourdomain.com;
       location / {
          proxy_pass http://localhost:8102;
          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_set_header X-Forwarded-Proto $scheme;
       }
    }
    

    请将 yourdomain.com 替换为你的域名或服务器 IP。

    以上配置会将来自端口为 80 的请求转发到本地的端口为 8102 的服务上。

    如果没有域名的话,可以直接将配置文件内容改为下面的

    server {
    	listen 80;
    	location / {
      	proxy_pass http://localhost:8102;
    	}
    }
    

    这里的 proxy_pass 用来设置要代理的应用程序的地址,这里设置为本地的 http://localhost:8102,也可以设置为其他 IP 地址和端口。这样就可以将流量转发到要代理的应用程序上了。

  3. 检查 Nginx 配置文件语法是否正确。

    sudo nginx -t
    
  4. 如果语法正确,则重新加载 Nginx 配置文件。

    sudo systemctl reload nginx
    
  5. 现在,你可以通过访问你的域名 http://yourdomain.com或者你主机的IP地址http://xxx.xxx.xxx.xxx 来访问你的服务了。


代理HTTPS请求

如果是代理HTTPS 请求的话上面的步骤可以忽略了,按照以下方式进行配置HTTPS的反向代理:

  1. 首先,确保你的服务器上已经安装了 SSL 证书,并已经配置了 HTTPS 监听器。这里不再赘述。

注意开启https请求是需要域名的;在没有域名的情况下开启 HTTPS 请求是有一定难度的,因为 HTTPS 协议中需要使用到 SSL/TLS 证书,证书需要绑定到域名上,这样才能保证通信过程的安全性。如果没有域名,你可以尝试使用自签名证书,但是这种证书在浏览器中会被标记为不安全,而且使用自签名证书也无法避免中间人攻击的风险。因此,建议在使用 HTTPS 请求之前先获得一个域名,然后使用该域名来申请 SSL/TLS 证书。如果需要申请免费的SSL证书,请看这篇文章 :为域名申请免费的SSL证书,实现启用HTTPS加密

  1. 编辑 Nginx 配置文件 /etc/nginx/sites-available/default
    在修改配置文件前先备份一下配置文件,防止修改错误后无法恢复: cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
    然后在命令行中输入vim /etc/nginx/sites-available/default,进入vim编辑器编辑下面的内容

    server {
        listen 80;
        server_name example.com;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name example.com;
    
        ssl_certificate /path/to/ssl/cert.pem;
        ssl_certificate_key /path/to/ssl/key.pem;
    
        location / {
            proxy_pass http://127.0.0.1:8102;
            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_redirect off;
            proxy_buffering off;
        }
    }
    

这是一个 Nginx 配置文件的示例,用于将 HTTP 和 HTTPS 请求转发到本地的 8102 端口上。

第一个 server 块监听 80 端口,如果请求的是 example.com,则返回一个 301 重定向到 HTTPS 协议。$server_name 变量表示 server_name 指令设置的主机名,$request_uri 变量表示请求的 URI。

第二个 server 块监听 443 端口,使用 SSL 协议进行加密通信。ssl_certificate 和 ssl_certificate_key 指令分别指定 SSL 证书和私钥的路径,用于对客户端和服务器之间的通信进行加密。

location 块定义了一个请求的 URI 到本地服务的映射关系。proxy_pass 指令将请求转发到 127.0.0.1:8102,即本地的 8102 端口上。proxy_set_header 指令设置了一些 HTTP 头信息,例如 Host 头和 X-Real-IP 头,用于将请求头信息传递给后端的服务。proxy_redirect、proxy_buffering 指令分别用于关闭重定向和缓存。

  1. 检查 Nginx 配置文件语法是否正确。

    sudo nginx -t
    
  2. 如果没有错误,重启 Nginx 服务:在命令行中输入

    sudo systemctl restart nginx
    

这个配置将会将 HTTPS 请求通过 Nginx 反向代理到本地的 http://127.0.0.1:8102 端口,同时将请求头中的 HostX-Real-IPX-Forwarded-For 值设置为当前请求的值。proxy_redirect off 表示禁用 Nginx 默认的代理重定向行为,proxy_buffering off 表示关闭 Nginx 对响应内容的缓冲。

举个大栗子

比如我的域名为:data.zenytech.xyz, 将使用Nginx实现代理https的请求

  • 先备份一份配置文件, 防止出错

    root@myserver:~# cd /etc/nginx/sites-available/
    root@myserver:/etc/nginx/sites-available# ls
    default
    root@myserver:/etc/nginx/sites-available# cp default default.bak
    root@myserver:/etc/nginx/sites-available# ls
    default  default.bak
    root@myserver:/etc/nginx/sites-available# vim default
    
  • default文件修改如下:

    server {
            listen 80;
            server_name data.zenytech.xyz;
            return 301 https://$server_name$request_uri;
    }
         
         
    server {
            listen 443 ssl;
            server_name data.zenytech.xyz;
            
         location / {
            proxy_pass http://127.0.0.1:8102;
            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_redirect off;
            proxy_buffering off;
        }
        
        ssl_certificate /etc/letsencrypt/live/data.zenytech.xyz/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/data.zenytech.xyz/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    }
     
    server {
        if ($host = data.zenytech.xyz) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
            listen 80 ;
            listen [::]:80 ;
        server_name data.zenytech.xyz;
        return 404; # managed by Certbot
    }
    

当用户请求data.zenytech.xyz时,第一个server block会将请求重定向到https。第二个server block监听443端口,配置SSL证书,同时将请求代理到本地的8102端口。第三个server block是由Certbot管理的,用于重定向所有HTTP请求到HTTPS。因此,这个配置允许用户通过data.zenytech.xyz访问我的服务,并使用SSL保护其安全性。

  • 最后重启一下Nginx的服务即可。
    请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1703_LibreOffice常用功能使用体验

全部学习汇总: GreyZhang/windows_skills: some skills when using windows system. (github.com) 首先需要说明的是我不是一个重度Office用户,甚至算不上一个重度的Office用户。我使用的Office软件最多的功能就是文档编辑,绝大多数时候还是文…

【什么是苹果推信?什么是苹果推?】通过苹果手机Imessage进行信息推送的方式;

如今不少人都在利用苹果手机,重要是装备高端,很少呈现卡机的征象,并且星移斗换快,紧跟互联网期间成长的脚步。苹果手机是火了,谁又能想到另有比它更火的事变出现呢,便是苹果推信。苹果推信主要上风是推信群…

晋商银行“沧海”数据资产管理系统

案例名称 晋商银行“沧海”数据资产管理系统 案例简介 晋商银行“沧海”数据资产管理系统,取自“海纳百川、沧海一粟”之意,即数据如茫茫大海,其价值不可估量。该系统贯穿数据的全生命周期,包括数据多维度描述、数据…

期末复习自用--python

前言 python的优点: 简洁,语法优美,简单易学,开源,可移植性好,拓展性好,类库丰富,通用灵活,模式多样,良好的中文支持。 python的缺点: 执行效率不…

1.信息的表示和处理

基础 进制转换 字数据大小 寻址和字节顺序(大小端) 01 23 45 67 大端法:最高有效字节(01)在最前面(相当于正序) 小端法:最低有效字节(67)在最前面&#xff0…

Ceph入门到精通-CrushMap算法概述

下面是伪代码object到osd的伪代码 locator =object_name obj_hash =hash(locator) pg =obj_hash %num_pg OSDs_for_pg =crush(pg) # returns a list of OSDs primary =osds_for_pg[0] replicas =osds_for_pg[1:] defcrush(pg): all_osds=[osd.0,osd.1,osd.2,...] resu…

【Linux内核解析-linux-5.14.10-内核源码注释】内核常用链表宏解释

1、list_for_each_entry_safe 这段代码是一个宏定义,用于遍历一个链表中所有的元素,并且在遍历过程中可以安全地删除元素。具体来说,这个宏定义的功能是: 遍历链表中所有的元素,从头节点开始,直到尾节点结束…

读SQL进阶教程笔记15_SQL编程思维

1. 还原论 1.1. 认为可以把高级现象还原为低级基本现象的学说 1.2. 将复杂的东西看成是由简单单元组合而成的 1.2.1. 以赋值、条件分支、循环等作为基本处理单元,并将系统整体分割成很多这样的单元的思维方式 1.2.2. 文件系统也是将大量的数据分割成记录这样的小…

DOM事件(中)

常见的事件分类(了解) ●我们在写页面的时候经常用到的一些事件 ●大致分为几类,浏览器事件 / 鼠标事件 / 键盘事件 / 表单事件 / 触摸事件 ●不需要都记住,但是大概要知道 鼠标事件 ●click :点击事件 ●dblclick &a…

Python小姿势 - # 如何使用Python爬取网页数据

如何使用Python爬取网页数据 今天我们来学习一下如何使用Python来爬取网页数据。 首先,我们需要准备一个空白的文件,在文件中输入以下代码: import requests url http://www.baidu.com r requests.get(url) print(r.text) 上面的代码中&…

宝宝腹泻怎么办?儿科医生分享小儿腹泻的辩证和处理方法

小儿腹泻病是婴幼儿时期的常见病。面对腹泻,很多父母往往不知所措,甚至不知道该怎么处理,只能带宝宝去医院治疗。由于腹泻具有反复性,稍有护理不当,甚至会加重病情。那么,小儿腹泻药如何处理呢?…

微服务---Redis实用篇-黑马头条项目-登录功能(短信验证缓存,用户信息缓存)

黑马头条项目-登录功能(短信验证缓存,用户信息缓存) 1、短信登录 1.1、导入黑马点评项目 1.1.1 、导入SQL 1.1.2、有关当前模型 手机或者app端发起请求,请求我们的nginx服务器,nginx基于七层模型走的事HTTP协议,可以实现基于Lua直接绕开t…

Android之WindowManager介绍

WindowManager android中真正展示给用户的是window和view. activity在android中所其的作用主要是处理一些逻辑问题,比如生命周期的管理、建立窗口等。 在android中,窗口的管理还是比较重要的一块,因为他直接负责把内容展示给用户&#xff…

11.streamFile

1.Stream流 1.1体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素把集合中所有以"张"开头的元素存储到一个新的集合把"张"开头的集合中的长度为3的元素存储到一个新的集合遍历上一步得到的集…

05-微服务部署2023系列-centos+docker部署redis(单机版)

1、创建数据挂载目录 mkdir /root/docker/redisCluster/redis1/data -p 2、部署并启动命令 docker run -itd --privileged=true --name redisMaster -p 19000:6379 -v /root/docker/redisCluster/redis1/data:/data redis --appendonly yes --requirepass "myRedisPass123…

美颜sdk的开发流程及其在不同平台上的适用性比较

当下,在开发美颜功能时,美颜sdk成为了不可或缺的工具。近期,很多开发者向小编提问开发美颜的一些专业技术问题。本篇文章,小编将为大家统一解答一下近期的热门问题。 一、开发流程 1、确定美颜算法 美颜算法是美颜sdk的核心&a…

【Linux下】进程间通信

文章目录 进程间通信进程间通信的目的进程间通信的分类进程间通信的本质 管道初识管道匿名管道创建匿名管道理解协同机制和原子性写入 命名管道命名管道创建的俩种方式使用命名管道实现俩个不同进程之间通信 **管道实现进程间通信的本质**匿名管道vs命名管道 system Vsystem V共…

【Linux】进程概述和进程状态转换(查看进程、实时显示进程动态、杀死进程等)

目录 进程概述进程状态转换进程的状态进程相关命令 橙色 进程概述 进程是正在运行的程序的实例,是基本的分配单元也是基本的执行单元。 可以用一个程序来创建多个进程,进程是由内核定义的抽象实体,并为该实体分配用以执行程序的各项系统资源…

【Jmeter快速入门】

Jmeter快速入门 Jmeter快速入门1.安装Jmeter1.1.下载1.2.解压1.3.运行 2.快速入门2.1.设置中文语言2.2.基本用法 Jmeter快速入门 1.安装Jmeter Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。 1.1.下载 可以Apache Jm…

git在vs可视化界面下变基操作

vs版本:vs2022 天天都在使用git,听说过变基这个名词,但是并没有实操过变基,正好今天有个同事说起一件事情:提交代码的时候有太多的自动合并,如果需要回退版本,操作起来很困难,理想状…