一个执着于技术的公众号

前言

在前面的章节中,我们已经学习了nginx基础知识:

给小白的 Nginx 10分钟入门指南

Nginx编译安装及常用命令

完全卸载nginx的详细步骤

Nginx 配置文件详解

理解正向代理与反向代理的区别

今天我们通过两个实例,带大家读懂nginx反向代理

Nginx反向代理实例 1

1、实现效果

打开浏览器,在地址栏输入地址www.test.com,跳转到百度首页。

2、准备工作

(1)在Linux系统安装nginx

1)创建用于运行Nginx的用户
useradd -M -s /sbin/nologin nginx
2)下载nginx软件包
wget http://nginx.org/download/nginx-1.18.0.tar.gz
3)解压
tar -xf nginx-1.18.0.tar.gz -C /usr/src
4)configure
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module
参数说明:
--user=nginx:指定nginx程序运行用户
--group=nginx:指定nginx程序运行用户组
--prefix=/usr/local/nginx:指定安装路径
--with-http_ssl_module:开启nginx的SSL模块来支持HTTPS访问
5)编译安装
make -j 4 && make install
6)给nginx命令做个软链接,以便PATH能找到
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
7)本次实验nginx版本
[root@qll251 ~]# nginx -v
nginx version: nginx/1.18.0

(2)编辑nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

  • server_name:监听访问的域名;

  • proxy_pass URL:把请求转发到指定URL

(3)重启nginx服务

如果出现以上报错,说明Nginx未开启SSL模块,解决方案:

在安装编译时,需配置ssl支持
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module

重启nginx服务:

nginx -s stop && nginx

(4)Windows hosts文件修改

在Windows的hosts文件中进行域名和ip对应关系的配置


3、访问测试



如果您在实验过程中遇到如下报错:

出现上面的问题,原因是nginx 没办法监听本地不存在的ip地址。

解决方法是在/etc/sysctl.conf 中加入如下内核参数配置

echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p

4、访问过程分析


Nginx反向代理实例 2

1、实现效果

使用nginx反向代理,根据访问路径跳转到不同端口的服务中:

  • 本次nginx反向代理中使用9001端口

  • 访问http://10.43.187.251:9001/edu/,直接跳转转至127.0.0.1:8080

  • 访问http://10.43.187.251:9001/vod/,直接跳转转至127.0.0.1:8081

2、准备工作

(1)部署两个tomcat服务器

tomcat依赖java运行环境,因此先完成jdk环境变量的配置

1、下载jdk
wget http://big.gxkjbg.com:8080/201704/tools/jdk-linux-x64.tar.gz
tar -zxvf jdk-linux-x64.tar.gz -C /usr/src/
ls /usr/src/jdk1.8.0_131/ 2、编辑环境变量
vim /etc/profile
export JAVA_HOME=/usr/src/jdk1.8.0_131
export JAVA_BIN=/usr/src/jdk1.8.0_131/bin
export PATH=${JAVA_BIN}:$PATH
export CLASSPATH=.:{JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar 3、使环境变量立即生效
source /etc/profile 4、检查java版本
[root@qll251 ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@qll251 ~]#

(2)启动2个tomcat服务

1、下载免安装版Tomcat
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.54/bin/apache-tomcat-8.5.54.tar.gz 2、创建两个文件夹
mkdir /usr/src/tomcat8080
mkdir /usr/src/tomcat8081 3、解压
tar -zxvf apache-tomcat-8.5.54.tar.gz -C /usr/src/tomcat8080
tar -zxvf apache-tomcat-8.5.54.tar.gz -C /usr/src/tomcat8081 4、启动tomcat1
[root@qll251 ~]# cd /usr/src/tomcat8080
[root@qll251 tomcat8080]# ./apache-tomcat-8.5.54/bin/startup.sh 5、启动tomcat2 由于tomcat1使用8080默认端口,防止端口冲突,我们修改下tomcat2端口:
[root@qll251 ~]# cd /usr/src/tomcat8081
[root@qll251 tomcat8081]# vim apache-tomcat-8.5.54/conf/server.xml
22 <Server port="8015" shutdown="SHUTDOWN">
69 <Connector port="8081" protocol="HTTP/1.1" 启动tomcat2:
[root@qll251 tomcat8081]# ./apache-tomcat-8.5.54/bin/startup.sh

(3)检测tomcat端口已正常启动

(4)创建测试访问页面

1、在tomcat1中创建a.thml文件
[root@qll251 ~]# cd /usr/src/tomcat8080
[root@qll251 tomcat8080]# cd apache-tomcat-8.5.54/webapps/
[root@qll251 webapps]# mkdir edu
[root@qll251 webapps]# echo "<h1>8080!</h1>" > edu/a.thml 2、在tomcat2中创建a.thml文件
[root@qll251 ~]# cd /usr/src/tomcat8081
[root@qll251 tomcat8081]# cd apache-tomcat-8.5.54/webapps/
[root@qll251 webapps]# mkdir vod
[root@qll251 webapps]# echo "<h1>8081!</h1>" > vod/a.thml

(5)编辑nginx配置文件

vim /usr/local/nginx/conf/nginx.conf


3、最终测试

使用nginx反向代理功能实现了访问两个tomcat服务的需求

解释一下

本周因家中有事,停止更新了一周,在这里向读者朋友们致歉。现已处理完毕,即日起继续为大家分享好文章,愿与大家一起学习,共同进步。期待与您相遇~

往期精彩

◆  必看 | Linux系列学习书籍免费送

◆  利用expect批量修改Linux服务器密码

◆  Linux运维工程师面试问答录

◆  LVM逻辑卷学习

◆  Linux网络重点知识总结性梳理

◆  抓包工具tcpdump用法说明

◆  一文带你速懂虚拟化KVM和XEN

◆  实战 | Hadoo大数据集群搭建

◆  运维工程师心法:6大技能让你告别背锅

◆  亿级web系统负载均衡几种实现方式

实战 | 一文带你读懂Nginx反向代理的更多相关文章

  1. 一文带你读懂什么是vxlan网络

    一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...

  2. 一文带你读懂zookeeper在大数据生态的应用

    一个执着于技术的公众号 一.简述 在一群动物掌管的世界中,动物没有人类聪明的思想,为了保持动物世界的生态平衡,这时,动物管理员-zookeeper诞生了. 打开Apache zookeeper的官网, ...

  3. 谁说前端不需要懂-Nginx反向代理与负载均衡

    转:https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用 ...

  4. 从源码入手,一文带你读懂Spring AOP面向切面编程

    之前<零基础带你看Spring源码--IOC控制反转>详细讲了Spring容器的初始化和加载的原理,后面<你真的完全了解Java动态代理吗?看这篇就够了>介绍了下JDK的动态代 ...

  5. 【并发编程】一文带你读懂深入理解Java内存模型(面试必备)

    并发编程这一块内容,是高级资深工程师必备知识点,25K起如果不懂并发编程,那基本到顶.但是并发编程内容庞杂,如何系统学习?本专题将会系统讲解并发编程的所有知识点,包括但不限于: 线程通信机制,深入JM ...

  6. 一文带你读懂 Mysql 和 InnoDB存储引擎

    作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系 ...

  7. 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?

    摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...

  8. 一文带你读懂什么是docker

    一 简介 1.了解Docker的前生LXC LXC为Linux Container的简写.一种轻量级的内核虚拟化技术,隔离进程和资源. Linux Container有点像chroot,提供了一个拥有 ...

  9. SLAM到底是什么?一文带你读懂SLAM

    SLAM是Simultaneous localization and mapping缩写,意为“同步定位与建图”,主要用于解决机器人在未知环境运动时的定位与地图构建问题,为了让大家更多的了解SLAM, ...

随机推荐

  1. mac终端所有命令不能用

    最近一次在用终端敲命令的时候发现命令总是不执行(只有cd命令可以正常执行),返回命令未识别的错误-bash: source: command not found 相信很多朋友也会遇到类似的问题. 解决 ...

  2. java-可变参数hei

    /* 使用前提: 当前方法的参数的数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 使用格式: 定义方法是使用 修饰符 返回类型 方法名(数据类型... 变量名){} 可变参数的原理: 可变 ...

  3. 1.0缓存:Login.aspx?

    所有的manifest资源配置文件以CACHE MANIFEST声明开头. #(哈希标签)有助于提供缓存文件的版本. CACHE命令指定哪些文件需要被缓存. manifest资源配置文件的内容类型应是 ...

  4. 学习Squid(三)

    Squid 缓存服务 1.缓存服务器结束 缓存服务器(cache server),即用来存储(介质为内存及硬盘)用户访问的网页.图片.文件等等信息的专用服务器,这种服务器不仅可以使用户可以最快的得到他 ...

  5. 《剑指offer》面试题3:二维数组中的查找

    面试题3:二维数组中的查找 面试题3:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的个二维数组和一个整数,判 ...

  6. [ Shell ] 通过 Shell 脚本导出 CDL 网表

    https://www.cnblogs.com/yeungchie/ 通过 si 导出电路网表,实际上在 Virtuoso 中通过 export - cdl 和 Calibre LVS 的步骤中也是通 ...

  7. pytest进阶使用【fixture(一)fixture与setup/teardown区别】

    fixture翻译为装置. 我觉得名字是很贴合功能的,可以自由给函数装置上自己想要的功能. 当在说pytest比unitest灵活时,fixture肯定是其中的一个理由. 测试数据的准备和执行以后的数 ...

  8. NodeJs学习日报——day3

    // 导入模块 const http = require('http') // 创建web服务器实例 const server = http.createServer() // 为服务器实例绑定req ...

  9. golang-grpc

    目录 1. 什么是grpc和protobuf 1.1 grpc 1.2 protobuf 2.go下grpc 2.1官网下载protobuf工具 2.2 下载go的依赖包 2.3 编写proto文件 ...

  10. 2021-01-25 cf #697 Div3 C题(超时,换思路减少复杂度)

    题目链接:https://codeforces.com/contest/1475/problem/C 题意要求:需组成的2对,男的序号不能重,女的序号不能重 比如这例 输入: 行1--测试个数 行1` ...