学习Nginx

基本用法:正向代理 && 反向代理 && 动静分离 && 负载均衡

一句话总结:正向代理屏蔽了真实的ip地址,反向代理屏蔽了服务器的位置

正向代理

  1. 功能
    • 常用于VPN,翻墙:举一个比较简单的例子:
      • 你想去问老师问题,但是你没办法直接找到老师
      • 你委托一个同学去找老师
      • 同学找到了老师并且老师告诉了你同学你想问的内容
      • 你同学回来告诉你老师说了什么
      • 相当于你成功问了老师问题
    • 同学在这一个过程中起的是代理服务器的作用
  2. 定义
    • 在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

反向代理

  1. 功能
    1. 隐藏服务器真实ip地址,增强安全性
    2. 负载均衡,将请求转发到多台后端服务器,提高性能和可用性
    3. 静态资源缓存,减少后端服务器压力,提升响应速度
  2. 定义
    • 我们将请求发送到代理服务器中,由反向代理服务器去选择目标服务器获取数据,再返回给客户端,此时可以将反向代理服务器和目标服务器视为同一个服务器,暴露了代理服务器的地址,隐藏了真实服务器地址的ip

负载均衡

  1. 功能:很多请求打入服务器,很可能会造成崩溃,这时候需要Nginx转发请求,让每个服务器都能分摊请求。其实就是一个项目的jar包部署在多台服务器上。

动静分离

  1. 功能:将静态资源和动态资源分别部署在不同的服务器上,节省资源空间,加快访问速度。

在Linux上配置及使用Nginx

  • 使用ssh远程链接本地的ubuntu
    • ssh:SSH(Secure Shell) 是一种网络协议,用于在 不安全的网络中安全地远程登录另一台机器,比如你在 Windows 上登录一台 Linux 服务器。
  • Xshell:让我们能在windows上操作Linux系统,配合Xftp实现上传下载文件
  • 最终可以实现使用ip访问nginx

Nginx的配置文件

三部分组成

全局块

  • 作用:从配置文件到events块的所有内容,主要会设置一些影响 nginx 服务器整体运行的配置命令
  • 全局块配置如下:
1
2
3
4
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

比如worker_processes这个参数,越大的话,可以支持的并发处理量也就越多

events块

  • 作用:影响Nginx服务器与用户的网络连接
1
2
3
4
events {
worker_connections 768;
# multi_accept on;
}
  • 比如worker_connections是支持的最大连接数

http块

  • http块里又分为两块:http全局块server块

配置示例

反向代理

  • 实现功能:在浏览器中输入www.123.com跳转到linux系统中tomcat主页面中
  • 首先安装tomcat
    • 进入tomcat的官网,可以使用wget下载,也可以在windows下载然后使用xftp移动安装包进入opt
    • 解压 tar -zxvf 压缩包
    • 启动startup.sh脚本
  • 启用对外访问的端口8080
    • firewall-cmd –add-port=8080/tcp –permanent
    • firewall-cmd –reload
    • firewall-cmd –list-all
  • 修改本地的host文件夹:192.168.6.128 www.123.com(这一步是在模拟DNS解析过程,让浏览器知道我们应该跳哪)
  • 反向代理配置(proxy_123.conf)
1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name www.123.com;
location / {
proxy_pass http://192.168.6.128:8080;
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;
}
}
  • 我们本地测试时用 hosts 模拟 DNS,让浏览器能把域名解析到虚拟机的 IP。上线后就不需要这个步骤,因为 DNS 已经负责把域名解析到服务器公网 IP。浏览器发请求到服务器后,由 Nginx 判断请求路径或域名,转发到对应后端服务(不同端口),然后把返回的结果发回浏览器。这就是路径转发功能