Nginx入门和反向代理

2023-10-29

文章目录

1.Nginx简介

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

2.Nginx在Linux上安装

2.1先去nginx官网下载压缩包

建议下载稳定版本的
在这里插入图片描述

2.2把压缩包上传到Linux中

在这里插入图片描述

2.3 安装依赖环境

①安装gcc环境

  yum install gcc-c++

②安装PCRE库,用于解析正则表达式

 yum install -y pcre pcre-devel

③zlib压缩和解压依赖

 yum install -y zlib zlib-devel

④SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https

 yum install -y openssl openssl-devel

2.4.解压,需要注意,解压后得到的是源码,源码需要编译后才能安装

tar -zxvf nginx-1.20.2.tar.gz

2.5 编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错

mkdir /var/temp/nginx -p

2.6 在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \     
--lock-path=/var/lock/nginx.lock \    
--error-log-path=/var/log/nginx/error.log \    
--http-log-path=/var/log/nginx/access.log \    
--with-http_gzip_static_module \    
--http-client-body-temp-path=/var/temp/nginx/client \    
--http-proxy-temp-path=/var/temp/nginx/proxy \   
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \    
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \    
--http-scgi-temp-path=/var/temp/nginx/scgi

我这里的代码时一行一行运行的,如果一块运行有问题
在这里插入图片描述
在这里插入图片描述
配置命令:

命令 解释
–prefix 指定nginx安装目录
–pid-path 指向nginx的pid
–lock-path 锁定安装文件,防止被恶意篡改或误操作
–error-log 错误日志
–http-log-path http日志
–with-http_gzip_static_module 启用gzip模块,在线实时压缩输出数据流
–http-client-body-temp-path 设定客户端请求的临时目录
–http-proxy-temp-path 设定http代理临时目录
–http-fastcgi-temp-path 设定fastcgi临时目录
–http-uwsgi-temp-path 设定uwsgi临时目录
–http-scgi-temp-path 设定scgi临时目录

2.7make编译

make

2.8 安装

make install

2.9 进入sbin目录启动nginx

./nginx

在这里插入图片描述

3.0 Nginx进程模型

3.1查看Nginx进程命令

ps -ef|grep nginx

在这里插入图片描述

Nginx进程模型

master 进程:主进程
(只有一个)
worker 进程:工作进程
(默认只有一个,可以在nginx/conf/nginx.conf文件下设置多个)
在这里插入图片描述
master进程用于管理work进程,接受来自外界的信号、指令并传递给worker,会监控worker,若worker异常退出,会重新启动worker
worker关闭时,会等待当前客户端连接释放后,才会关闭
多进程虽然会带来额外的内存开销,采用多进程而不采用多线程的原因:

  1. 进程之间相互独立,互不影响,某一个worker出问题不会影响其他worker
  2. 不需要开发人员去额外关注线程安全性
    在这里插入图片描述
    worker具体做事情处理请求
    master监控、创建、对worker发送执行指令
//指令
./nginx -s stop  //停止NGINX
./nginx -s quit
./ngnix -s reload  //修改配置文件后需要重新加载
./nginx -t             //检验配置文件修改的是否正确

2.基于Docker安装以及运行

①下载最新nginx镜像

docker pull nginx

在这里插入图片描述

②运行nginx容器

docker run -id -p 80:80 nginx

在这里插入图片描述

③重启nginx容器

docker restart 容器id

④关闭nginx容器

docker stop 容器id

3.Nginx原理以及配置文件讲解

我们如何来找nginx的安装目录呢,有两种方法;

第一种:通过dockerfile的定义来看;

第二种,简单粗暴,直接搜索

find / -name nginx

在这里插入图片描述

配置文件介绍

nginx.conf


user  nginx; #配置worker进程运行用户
worker_processes  1;#配置工程进程数目,根据硬件配置,一般是和CPU数量一致,或者CPU数量的2倍,能达到最佳性能

error_log  /var/log/nginx/error.log warn;# 配置全局错误日志文件以及配置级别 [ debug | info | notice | warn | error | crit ] 

pid        /var/run/nginx.pid;#配置进程pid文件

#events配置

#events 是配置工作模式和连接数

events {
    worker_connections  1024;# 配置每个worker进程连接数上限
}


http {
    include       /etc/nginx/mime.types;# 配置nginx支持哪些多媒体类型
    default_type  application/octet-stream;#默认文件类型
    #配置日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main; #配置访问日志  ,并使用上面的格式

    sendfile        on;# 开启高效文件传输模式
    #tcp_nopush     on;#开启防止网络阻塞模式
 

    keepalive_timeout  65;#长连接超时时间,单位秒

    #gzip  on; #开启gzip压缩输出

    include /etc/nginx/conf.d/*.conf;
}

default.conf

server {
    listen       80;#监听端口 
    server_name  localhost; # 配置服务名

    #charset koi8-r;#配置字符集
    #access_log  /var/log/nginx/host.access.log  main;#配置本虚拟主机访问日志
# 匹配/请求 ,/是根路径请求,会被该location匹配到并且处理
    location / {
        root   /usr/share/nginx/html;#root是配置服务器的默认网关根目录位置
        index  index.html index.htm;#配置首页文件的名称
    }

    #error_page  404              /404.html;#配置404页面

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;#配置50x错误页面
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}


4.挂载容器目录启动Nginx容器

为后续方便修改nginx的配置文件,我们将nginx的配置目录copy到宿主机,将其作为新nginx容器启动的共享目录;

cd /home
mkdir data
docker cp 43d093a375ee:/etc/nginx /home/data/nginx

在这里插入图片描述
在这里插入图片描述

5.Nginx反向代理

什么是代理服务器?

代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。

为什么要使用代理服务器?

1,提高访问速度

由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。

2,防火墙作用

由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。

3,通过代理服务器访问不能访问的目标站点

互联网上有许多开放的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的翻墙浏览器就是利用了代理服务器,虽然不能出国,但也可直接访问外网。

什么是正向代理?

正向代理,架设在客户机与目标主机之间,只用于代理内部网络对 Internet 的连接请求,客户机必须指定代理服务器,并将本来要直接发送到 Web 服务器上的 Http 请求发送到代理服务器中。

什么是反向代理?

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
在这里插入图片描述

实现反向代理

启动nginx

docker run -it --name=myNginx -v /home/data/nginx:/etc/nginx -p 80:80 nginx

在这里插入图片描述

启动tomcat

docker run -d  -p 8080:8080  tomcat镜像id

在这里插入图片描述

查看应用在docker容器中的IP

docker inspect 容器ID

查看Tomcat的IP : 172.17.0.3
在这里插入图片描述
查看nginx的IP: 172.17.0.2
在这里插入图片描述

修改default.conf配置

在这里插入图片描述

重启nginx容器(通过nginx访问tomcat)

docker restart nginx容器ID

然后通过nginx访问Tomcat,直接输入宿主机IP即可
在这里插入图片描述
修改本机C:\Windows\System32\drivers\etc
目录下的hosts文件可以整个域名映射本机

直接输入aa.com也可以访问Tomcat啦
在这里插入图片描述

注意注意!!!
当docker仓库中的Tomcat无法访问时,就进入Tomcat容器中会发现有两个文件webapps,webapps.dist,只要把webapps文件删除,然后把webapps.dist文件改个名字为webapps即可。(因为打开webapps文件时是空的,而tomcat的配置文件在webapps.dist文件中,所以只要把webapps删除了,给webapps.dist改成webapps就可以了)

为了以后方便使用Tomcat,把改好的这个Tomcat容器copy出来,创建一个自己的Tomcat,以后启动Tomcat的时候就用自己创建的这个Tomcat即可。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx入门和反向代理 的相关文章

随机推荐

  • Ubuntu18.04配置darknet环境实现YOLOv4目标检测(五)——darknet YOLOv4和YOLOv4-tiny模型转ONNX转TensorRT部署

    文章目录 1 github开源代码 2 darknet模型转ONNX模型 3 ONNX模型转TensorRT模型 3 1 概述 3 2 编译 3 3 运行 4 推理结果 1 github开源代码 开源代码位置在这里 darknet转ONNX
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(一)简介

    笔者写的这个教程集 是一项带引号的 翻译 类教程 Joey De Vries 的现代OpenGL教程是我看过最好的图形学教程 没有之一 这是教程地址https learnopengl cn github io 01 20Getting 20
  • Polyman 初使用-01

    软件安装很easy 不赘述 启动软件 打开 edf文件 左侧是不同的通道名称 每页是一个epoch 也就是 30s 左下角的三角可以翻页 速度有点慢 我们可以拖动右上方方框里的白色竖条进行时间拉伸 红色填充是每个阶段的标签 这个是额外引入的
  • 由于您访问的url有可能对网站造成安全威胁_Web常见安全漏洞-XSS攻击

    XSS攻击 跨站脚本攻击 Cross Site Scripting 为了不和层叠样式表 Cascading Style Sheets CSS 的缩写混淆 故将跨站脚本攻击缩写为XSS XSS是一种常见的web安全漏洞 它允许攻击者将恶意代码
  • 区块链风暴来袭,这五大行业将受到强烈冲击

    自从第一枚比特币诞生以来 加密货币就代表了经济实现重大飞跃的一次机会 尽管比特币出现了 没有中心化的机构 并且成为了传统货币的数字化选择 驱动加密货币运作的底层计算机协议则是从之后才被认为具备大量其他的应用场景 从分布式账本的不可更改性到加
  • salt-key收集的主机名与实际主机名不一致

    salt key收集的主机名与实际主机名不一致 一 问题背景 root host 39 108 217 12 minions salt key L iZbp150ikdomqe3b32qaubZ izwz9f8xrvty50quc2gq50
  • Redhat6.5安装vnc服务远程桌面

    环境 操作系统 Redhat6 5 已安装桌面 远程工具 Xshell6 VNC服务 可以远程将桌面输出 tigervnc tigervnc server ssh远程到服务器之后 yum安装tigervnc tigervnc server
  • CKA认证题型解析

    文章目录 0 前言 1 RBAC 授权 2 节点设置不可用 3 升级 K8s 版本 注意 4 etcd 备份与恢复 5 网络策略 查看官网 NetworkPolicy 6 SVC 暴露应用 7 Ingress 查看官网 ingress 8
  • unix环境高级编程——进程间通信之管道

    本期主题 unix环境高级编程 进程间通信之管道 管道 1 什么是管道 1 定义 2 管道的局限性 2 进程管道 1 popen和pclose 2 使用popen的弊端 3 pipe函数 1 单进程管道通信 2 跨越fork调用的管道 4
  • 数字证书简介

    1 为什么 在说清楚数字证书是什么之前 先要搞清楚为什么要有数字证书 或者说数字证书的出现是为了解决什么问题 请看以下通信流程 1 1 使用数字签名技术防止信息伪造 1 1 1 发送明文信息 小灰灰给懒羊羊发了一条信息 约懒羊羊去玩 1 1
  • 自行获取区域经纬度的工具

    摘要 上一章教大家如何建立自己的行政区域地图 这次为大家提供一个 可视化选择区域 并且能自动生成经纬度代码的工具 工具的源代码完全公开 并且做了详尽的注释 可以单纯做为一个工具 也可做为百度地图API的学习案例 工具说明 1 开关可以控制
  • substring的常用两个方法

    概述 1 substring是用来截取字符串的 根据参数的个数不同 方法含义也不同 2 substring 0 2 这个只含开头不含结尾 因此截取是截取两个字符 从第一个到第二个字符 不包含第三个 3 substring 2 这个表示截掉前
  • javaweb-30:smbms项目搭建

    SMBMS 数据库 sql脚本 通过sqlyog图形化界面操作 在历史记录中对应相应的sql 表的引擎默认为InnoDB 字符集和核对默认和数据库一致 CREATE DATABASE smbms CHARACTER SET utf8 COL
  • java堆外内存泄漏分析排查

    JAVA堆外内存分析 文章目录 JAVA堆外内存分析 1 前言 2 准备 3 具体分析 3 1堆外溢出风险判断 3 1 1确认java进程号 3 1 2查看此java进程的jvm参数 3 1 3查看java进程的大概内存占用情况 3 1 4
  • bug: tab 标签页界面切换导致echarts图表默认宽度100px的问题

    bug tab 标签页界面切换导致echarts图表默认宽度100px的问题 最近在bootstrap中使用echarts 本来在一个页面显示全部图表时是正常的 后面使用tab标签页界面切换不同表格时碰到的一个echarts bug tab
  • 【CSDN开发云】光速认识Cloud IDE

    个人格言 时间是亳不留情的 它真使人在自己制造的镜子里照见自己的真相 Git专栏 Git篇 你的一键三连是对我的最大支持 CSDN最新产品 云IDE 来啦 云IDE 将为各位技术er一键秒级构建云开发环境 提升开发效率 为持续提升产品体验
  • javaScript数组方法记录——持续补充

    javaScript数组方法记录 将平时用到的或者可能用到的记录一下 有助于加深记忆 查找起来也方便 concat concat 方法用于 连接 两个或者多个 数组 会返回合并数组之后的数据 不会改变原来的数组 let a 张三 李四 赵五
  • DC基础学习(五)Verilog语言结构到门级的映射1

    Design Compiler 以下简称DC 是Synopsys公司用于做电路综合的核心工具 可以将HDL描述的电路转换为基于工艺库的门级网表 本系列主要介绍综合相关的知识以及DC工具的使用 Verilog编码效率的高低是综合后电路性能高低
  • 「Python 基础」网络编程、电子邮件

    文章目录 1 网络编程 TCP IP TCP 编程 服务端 客户端 UDP 编程 服务端 客户端 2 电子邮件 SMTP 发送邮件 POP3 收取邮件 1 网络编程 网络通信就是两个进程之间的通信 TCP IP IP 地址 计算机的网络接口
  • Nginx入门和反向代理

    文章目录 1 Nginx简介 2 Nginx在Linux上安装 2 1先去 nginx官网 http nginx org en download html 下载压缩包 2 2把压缩包上传到Linux中 2 3 安装依赖环境 2 4 解压 需