Nginx

Nginx (engine x) 是一款是由俄罗斯的程序设计师 Igor Sysoev 所开发高性能的 Web 和反 向代理服务器。第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。Nginx 是一个很强大 的高性能 Web 和反向代理服务器,它具有很多非常优越的特性:在连接高并发的情况下, Nginx 是 Apache 服务不错的替代品。

Nginx 作用:

  • http 协议代理
  • 搭建虚拟主机
  • 服务的反向代理
  • 在反向代理中配置集群的负载均衡

反向代理介绍

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用 户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为 Web 加速,即使用反向代理作为 Web 服务器的前置机来降低网络和服务器的负载,提高访问效率

代理方向

正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

二者之间的区别

位置不同

正向代理,架设在客户机和目标主机之间
反向代理,架设在服务器端

代理对象不同

正向代理,代理客户端,服务端不知道实际发起请求的客户端
反向代理,代理服务端,客户端不知道实际提供服务的服务端

安装 Nginx

Nginx 官网:http://nginx.org/

下载源码包

wget http://nginx.org/download/nginx-1.19.6.tar.gz

安装环境

nginx 是 C 语言开发,建议在 linux 上运行,本视频使用 CentOS8 作为安装环境

  • gcc:安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境, 需要安装 gcc

    yum install gcc make automake
    
  • PCRE:PCRE是一个 Perl 库,包括 Perl 兼容的正则表达式库。nginx 的 http 模块使用 Pcre 来解析正则表达式,所以需要在 linux 上安装 Pcre 库

    yum install -y pcre pcre-devel
    

    pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库

  • zlib:zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库

    yum install -y zlib zlib-devel
    
  • Openssl:OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书 封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux 安装 openssl 库

    yum install -y openssl openssl-devel
    # 安装依赖环境命令:
    yum -y install gcc make automake pcre-devel zlib zlib-devel openssl openssl-devel
    

配置

检查环境是否满足安装条件,先创建临时目录

mkdir -p /var/temp/nginx

进入解压后的nginx文件夹中,参数设置如下:

./configure \
--prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/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

编译安装

# 编译
make
# 安装
make install

Nginx 目录介绍

  • conf 目录:Nginx 所有配置文件的目录,极其重要。在该目录中包含一个 nginx.conf 配置文件
  • html 目录:Nginx 的默认站点目录
  • logs 目录:存放 Nginx 的日志文件
  • sbin 目录:Nginx 命令的目录,如 Nginx 的启动命令

Nginx的活动与关闭

  • 启动 Nginx
    Nginx 启动后会监听 80 端口,所以在启动 Nginx 时要确保 80 端口没有被占用
    可通过 lsof -i :80 命令或 netstat -ntpl 命令查看 80 端口是否被占用
    启动 Nginx:运行 sbin 目录下的 nginx 命令即可

    nginx
    
- 访问 Nginx
可通过浏览器访问 Nginx 检测启动是否成功。注意 Linux 中 80 端口在防火墙中是不开放 的,所以需要先关闭防火墙,或者开放 80 端口```bash# 关闭防火墙命令:systemctl stop firewalld.service```
- 关闭 Nginx- 立即停止服务这种方法比较强硬,无论进程是否在工作,都直接停止进程```bashnginx -s stop```- 从容停止服务这种方法较 stop 相比就比较温和一些了,需要进程完成当前工作后再停止```bashnginx -s quit```- killall 方法杀死进程直接杀死进程,在上面无效的情况下使用,态度强硬,简单粗暴```bashkillall nginx```
- Nginx 配置文件```bash
#全局块
# 指定可以运行 nginx 服务的用户和用户组,只能在全局块配置
#user nobody;
#nginx 进程,一般数值为 cpu 核数
worker_processes 1;
#错误日志存放目录
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#进程 pid 存放位置
#pid logs/nginx.pid; #event 块
#工作模式及连接数上限
events { #单个后台 worker process 进程的最大并发链接数 worker_connections 1024;
}#http 块
#http 块是 Nginx 服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能
#和第三方模块的配置都可以放在这个模块中。
http {#文件扩展名与类型映射表 include mime.types; #默认文件类型 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"'; #nginx 访问日志 #access_log logs/access.log main; #开启高效传输模式 sendfile on; #激活 tcp_nopush 参数可以允许把 httpresponse header 和文件的开始放在一个文件 里发布, 积极的作用是减少网络报文段的数量 #tcp_nopush on; #连接超时时间,单位是秒 #keepalive_timeout 0; keepalive_timeout 65; #开启 gzip 压缩功能 #gzip on; #server 块 #server 块和“虚拟主机”的概念有密切联系。 server { #监听端口 listen 80; server_name localhost; #编码识别 #charset koi8-r; #日志格式及日志存放路径 #access_log logs/host.access.log main; location / { #站点根目录,即网站程序存放目录root html; #首页排序 index index.html index.htm; }#错误页面 #error_page 404 /404.html; # 将服务器错误页面重定向到静态页面/50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }#代理 PHP 脚本到 Apache 上监听 127.0.0.1:80 #location ~ \.php$ { #     proxy_pass http://127.0.0.1; #} #将 PHP 脚本传递到正在监听 127.0.0.1:9000 的 FastCGI 服务器 #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; #} #如果 Apache 的文档根目录与 nginx 的根目录一致,则拒绝访问.htaccess 文件 #location ~ /\.ht { #   deny all; #} }#另一个虚拟主机,混合使用 IP、名称和基于端口的配置 #server {#     listen 8000; #  listen somename:8080; #     server_name somename alias another.alias; #     location / { #  root html; #    index index.html index.htm; #   } #} # HTTPS server ##server { #    listen 443 ssl; #   server_name localhost; #    服务的证书 #     ssl_certificate cert.pem; #     服务端 key #   ssl_certificate_key cert.key; #     会话缓存 #  ssl_session_cache shared:SSL:1m; #  会话超时时间 #    ssl_session_timeout 5m; #   #加密算法 #     ssl_ciphers HIGH:!aNULL:!MD5; #     启动加密算法 #    ssl_prefer_server_ciphers on; #     location / { #      root html; #        index index.html index.htm; #   } #}
}

Nginx 的使用

配置虚拟主机

虚拟主机介绍

  • 虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主 机,每个虚拟主机可以独立对外提供 www 服务,这样就可以实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。
  • 虚拟主机技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应 用于 HTTP(Hypertext Transfer Protocol,超文本传输协议)服务,将一台服务器的某项或者 全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件 资源。

Nginx 的虚拟主机配置方式

Nginx 支持三种类型的虚拟主机配置

  1. 基于 IP 的虚拟主机
  2. 基于端口的虚拟主机
  3. 基于域名的虚拟主机

基于 IP 的虚拟主机配置方式

  • 需求
    一台 Linux 服务器绑定两个 ip:192.168.233.137、192.168.233.188
    访问不同的 ip 请求不同的 html 目录,即:
    访问 http://192.168.233.137 将访问“html137”目录下的 html 网页
    访问 http://192.168.233.188 将访问“html188”目录下的 html 网页
  • Linux 绑定多 IP
    Linux 操作系统允许绑定多 IP。是在一块物理网卡上可以绑定多个 lP 地址。这样就能够在使用单一网卡的同一个服务器上运行多个基于 IP 的虚拟主机。但是在绑定多IP时需要将动态的 IP 分配方式修改为静态的指定 IP

    • 将动态 IP 修改为静态 IP

      cd /etc/sysconfig/network-scripts
      

      设置:BOOTPROTO="static"

    • 绑定多 IP
      IPADDR0=192.168.233.137
      IPADDR1=192.168.233.188
      NETMASK=255.255.255.0
      GATEWAY=192.168.233.2
      DNS1=114.114.114.114

  • 修改 Nginx 的配置文件完成基于 IP 的虚拟主机配置
    Nginx 的配置文件 nginx.conf
    如上述配置文件所示,主要由 6 个部分组成:

    • main:用于进行 nginx 全局信息的配置
    • events:用于 nginx 工作模式的配置
    • http:用于进行 http 协议信息的一些配置
    • server:用于进行服务器访问信息的配置
    • location:用于进行访问路由的配置
    • upstream:用于进行负载均衡的配置
  • nginx.conf
#一个 Server 就是一个虚拟主机
server { listen 80; #为虚拟机指定 IP 或者是域名 server_name 192.168.233.137; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root html137; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
}
#一个 Server 就是一个虚拟主机
server { listen 80; #为虚拟机指定 IP 或者是域名 server_name 192.168.233.188; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root html188; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
} 

基于端口的虚拟主机配置方式

  • 需求
    Nginx 对提供 8888 与 9999 两个端口的监听服务
    请求 8888 端口则访问 html8888 目录下的 index.html
    请求 9999 端口则访问 html9999 目录下的 index.html
  • 修改 Nginx 的配置文件完成基于端口的虚拟主机配置
#一个 Server 就是一个虚拟主机 基于端口
server { listen 8888; #为虚拟机指定 IP 或者是域名 server_name 192.168.70.188; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root html8888; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
}
#一个 Server 就是一个虚拟主机
server { listen 9999; #为虚拟机指定 IP 或者是域名 server_name 192.168.70.188; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root html9999;#在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
}

基于域名的虚拟主机配置方式

  • 需求:
    两个域名指向同一个 nginx 服务器,用户访问不同的域名时显示不同的内容
    域名规划:

    1. www.liang.cn
    2. www.zhou.cn
  • 修改 windows 的 hosts 文件配置域名与 ip 的映射
    文件路径:C:\Windows\System32\drivers\etc
    向文件添加:
    192.168.70.188 www.liang.cn
    192.168.70.188 www.zhou.cn
  • nginx.conf
server { listen 80; #为虚拟机指定 IP 或者是域名 server_name www.liang.cn; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root liang; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
}
#一个 Server 就是一个虚拟主机
server {listen 80; #为虚拟机指定 IP 或者是域名 server_name www.zhou.cn; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root zhou; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
}

Nginx 中配置服务的反向代理

需求

安装两个 Tomcat 服务,通过 nginx 反向代理。
Tomcat 安装到 192.168.233.136 环境中。端口为 8080 与 9090
Nginx 安装在 192.168.233.137 环境中

安装服务环境

  • 安装Tomcat

    cp apache-tomcat-8.5.54 /usr/local/tomcat1 -r
    cp apache-tomcat-8.5.54 /usr/local/tomcat2 -r
    
  • 配置Tomcat

    • 修改端口

      vi tomcat2/conf/server.xml
      

      修改端口为9090

    • 修改首页内容

      vim tomcat2/webapps/ROOT/index.jsp
      

配置 Nginx 实现服务的反向代理

http {include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream tomcat.server1{ server 192.168.233.136:8080; }upstream tomcat.server2{server 192.168.70.143:9090; }server { listen 80; #为虚拟机指定 IP 或者是域名 server_name www.tomcat1.com; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 proxy_pass http://tomcat.server1; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } #一个 Server 就是一个虚拟主机 server { listen 80; #为虚拟机指定 IP 或者是域名 server_name www.tomcat2.com; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 proxy_pass http://tomcat.server2;#在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; }error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
}

在反向代理中配置负载均衡

什么是负载均衡

负载均衡,英文名称为 Load Balance,是高可用网络基础架构的关键组件,通常用于 将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性

Nginx 负载均衡策略

  • 轮询(默认)
    每个请求按时间的先后顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉, 能自动剔除

  • 指定权重
    指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。权重值越 大被访问的几率就越大

    upstream backserver {server 192.168.0.14; server 192.168.0.15 weight=2;
    }
    
  • IP 绑定 ip_hash
    每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解 决 session 的问题

    upstream backserver { ip_hash; server 192.168.0.14; server 192.168.0.15;
    }
    

实现负载均衡配置

  • 需求
    通过 www.cluster.com 访问服务集群。
    nginx 服务器:192.168.233.137
    tomcat1 服务:192.168.233.136:8080
    tomcat2 服务:192.168.233.136:9090

  • 配置 IP 与域名绑定
    文件路径:C:\Windows\System32\drivers\etc
    向文件添加:
    192.168.233.137 www.tomcat1.cn
    192.168.233.137 www.tomcat2.cn
    192.168.233.137 www.cluster.cn

  • Nginx 配置服务集群

    upstream myServer { server 192.168.233.136:8080; server 192.168.233.136:9090;
    }
    
  • 在负载均衡中配置权重

    upstream myServer { server 192.168.233.136:8080; server 192.168.233.136:9090 weight=2;
    }
    
    • weight 默认为 1.weight 越大,负载的权重就越大
    • down 表示当前的 server 暂时不参与负载
    • fail_timeout 与 max_fails fail_timeout 设置时间默认值为 10s,max_fails 设置次数默认值为 1。 在单位周期为 fail_timeout 设置的时间,中达到 max_fails 次数,这个周期次数内,如果后端同一个节点不可用,那么将把节点标记为不可用,并等待下一个周期(同样时常为 fail_timeout)再一次去请求,判断是否连接是否成功。
    • backup: 其它所有的非 backup机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻

Http 协议代理

如果使用 ftp 上传图片时,由于 ftp 服务器是基于 ftp 协议处理的。那么现在想在外部访 问该图片,是没有办法访问的。他是不能处理 http 协议的。所以我们需要拥有一个能够处 理 http 协议代理服务器。其实就是使用了 Nginx 的虚拟主机的方式

  • 需求
    通过 Nginx 实现 http 协议的代理,访问指定目录中的图片
  • 配置 Http 协议代理
#全局配置块 user root;
server { listen 80; server_name img.cluster.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root /root/temp/; index index.html index.htm; }#error_page 404 /404.html; # redirect server error pages to the static page /50x.html #error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /favicon.ico{ }
}

反向代理——Nginx相关推荐

  1. CGB2005 JT7-8(文件 图片上传 uuid生成文件名 静态代码块,反向代理,Nginx,Host文件,tomact集群实现项目发布 ,nginx负载均衡种类)

    注意事项 1.京淘文件上传 文件上传api 京淘图片上传 利用静态代码块赋值 图片上传优化(动态赋值) uuid去掉横线 2.反向代理机制(正向反向代理说明) nginx学习 nginx实现反向代理 ...

  2. https - nginx反向代理 - nginx端口映射

    1.https实现:数据加密传输(对称密钥).验证服务器身份(非对称加密,公钥签名私钥验证): 2.nginx反向代理: nginx在服务端,发送给服务器的请求首先会经过ngnix,ngnix根据映射 ...

  3. 泛目录程序如何设置目录反向代理(Nginx反向代理泛目录、目录、整站方法 nginx反向代理配置)

    这里以宝塔面板为例,图形界面很友好,适合小白. 我自己的博客也有这篇原创文章,购买泛目录和技术参考请前往此贴: https://www.waytomilky.com/archives/738.html ...

  4. 安装Jupyter Notebook并配置用于多用户的反向代理(Nginx)

    虽然code-server已经能够满足很多需求, 比如用来写C/C++, Java, Tex等, 但是, 当遇到需要做数据分析的时候, 在code-server上运行Python和R就不是那么方便. ...

  5. nginx学习总结五(nginx反向代理)

    nginx学习总结五(nginx反向代理)                             2011-02-28 12:59:33标签:反向代理nginx负载均衡            原创作 ...

  6. nginx 一个请求发给多台机器_Nginx系列二:负载均衡与反向代理

    一.负载均衡 1.什么是负载均衡 随着请求数的快速增长,单服务器已经无法承担大量用户的并发访问,这个时候,就需要建立服务器集群,来让多台服务器协同工作,提高整体项目的吞吐量和QPS.假设一台设备资源占 ...

  7. yum 代理_教你如何在5分钟轻松部署nginx反向代理

    反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源.同时,用户不需要知道目标服务器的地址,也无须在用户端 ...

  8. MacOS开发必备工具brew,安装nginx反向代理,替代linux工具 apt-get和 yum...

    Mac os开发者必备工具 brew,替代Linux系统中的 apt-get和yum工具,本文介绍Mac电脑安装Homebrew,并下载安装软件nginx反向代理过程. 1.安装Homebrew 在苹 ...

  9. 如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理

    如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理 Nginx 是一款自由开源的 HTTP 和反向代理服务器,也可以用作 POP3/IMAP 的邮件代理服务器.Ngi ...

  10. Nginx的基本介绍反向代理

    什么是nginx Nginx 是异步框架的网页服务器,也可以用作反向代理.负载平衡器和 HTTP 缓存.大部分 Web 服务器使用 Nginx,通常作为负载均衡器. 部署web项目的容器(部署你们写的 ...

最新文章

  1. p20华为云电脑白屏_永别了电脑,华为大举动:华为云电脑,重新定义个人电脑...
  2. 小清新简约风个人简历PPT模板
  3. 底层经典书籍-编译原理
  4. Linux中使用export命令设置环境变量
  5. verilog的$dumpfile和$dumpvar系统任务详解
  6. java 枚举类型知识点记录
  7. Java-ConfigHelper工具类
  8. UPA论坛归来:没有最好,只有更适合——打造更有价值的用户体验团队
  9. 我们的系统是否需要EJB3?
  10. Spring中的@Autowired,@Qualifier和@Primary注解
  11. 暴力破解-----token验证
  12. mysql sniffer数据库审计_MySQL抓包工具:MySQL Sniffer
  13. 比较不错的MaciOS软件论坛
  14. ubuntu 14.04+QT5.5+PyQt5.5+Eric-6开发环境搭建
  15. 7-2 一元多项式的乘法与加法运算 (20 分)
  16. 2022年下半年软件设计师考试下午真题(专业解析+参考答案)
  17. STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度
  18. 《黎明时分的诗》王家新
  19. CSE105 Coursework
  20. NodeJs核心技术-张晓飞-专题视频课程

热门文章

  1. 胡寿松《自动控制原理》第7版笔记和课后习题答案
  2. 盘点一下 在Python中安装包的三种方法
  3. Linux上卸载JDK
  4. 连续获两家乘用车前向定点, 又一家国产毫米波雷达企业欲“赶超”外资巨头
  5. ILSpy .NET反编译工具下载地址
  6. OLS和GWR模型部分参数解释
  7. 杰控连接mysql_杰控FameView在数据库连接和查询方面的应用———FameView组态软件在数据库处理方面的...
  8. java语句以什么结尾_[JAVA] 关于语句的结尾
  9. python实现mysql数据导入HBase
  10. 运筹说 第4期|掌握运筹学软件,走遍天下都不怕