目录:
一、中间件的概念
中间件(Middleware)顾名思义是系统软件和用户应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件在客户服务器的操作系统、网络和数据库之上,管理计算资源和网络通信。总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
目录:
中间件(Middleware)顾名思义是系统软件和用户应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件在客户服务器的操作系统、网络和数据库之上,管理计算资源和网络通信。总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
文本文件的核心要素包括编码(字符与二进制的映射)、换行符(行结束标记)、缩进(文本层级调整),此外还有文件格式标记、BOM、空格类型等辅助要素,共同决定文本的可读性、兼容性和功能性。
编码是将人类可读的字符(如文字、符号)转换为计算机可存储的二进制(0和1)的规则,是文本文件能被正确识别的基础。
核心作用
解决“字符如何存进电脑”的问题,不同编码对应不同的“字符-二进制”映射表,编码不匹配会直接导致乱码。
常见编码及区别
CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。
CI/CD的核心概念是持续集成、持续交付和持续部署。
软件开发和发布的标准流程,一般可以分为以下几个阶段:
编码——构建——集成——测试——交付——部署
# ==============================
# Main Context (全局配置)
# ==============================
# 最外层,没有显式块包裹
user nginx nginx; # 运行用户
worker_processes auto; # 工作进程数
pid /var/run/nginx.pid; # PID文件路径
error_log /var/log/nginx/error.log warn; # 错误日志
daemon on; # 守护进程模式
worker_rlimit_nofile 65535; # 文件描述符限制
load_module modules/ngx_http_geoip_module.so; # 动态模块加载
# ==============================
# Events Context (事件模块)
# ==============================
events {
worker_connections 1024; # 每个worker连接数
use epoll; # 事件驱动模型
accept_mutex on; # 连接互斥锁
multi_accept on; # 多连接接受
}
# ==============================
# HTTP Context (HTTP模块)
# ==============================
http {
# ---------- 基础配置 ----------
include /etc/nginx/mime.types; # MIME类型
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; # 访问日志
# ---------- 核心模块 ----------
# 1. Upstream模块 (负载均衡)
upstream backend_cluster {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080;
server 192.168.1.12:8080 backup;
# 负载均衡方法
least_conn; # 最少连接
# 健康检查
max_fails=3 fail_timeout=30s;
}
# 2. 缓存配置
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
# 3. 限流配置
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
# ---------- Server Context ----------
server {
listen 80; # 监听端口
server_name example.com www.example.com; # 服务器名
# ---------- Location Context ----------
location / {
proxy_pass http://backend_cluster; # 代理到upstream
# 请求头配置
proxy_set_header Host $host; # 传递客户端请求的主机名(容错性强,无 Host 头时回退到 server_name)
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP(直接与 Nginx 连接的 IP)
proxy_set_header X-Real-Port $remote_port; # 传递客户端真实访问端口(补充端口信息,便于后端统计)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链路 IP 列表(格式:客户端IP, 一级代理IP, 二级...)
proxy_set_header X-Forwarded-Proto $scheme; # 传递真实协议(http/https,解决代理后后端无法识别协议的问题)
proxy_set_header X-Forwarded-Path $request_uri; # 传递客户端请求的完整路径(含参数)
# ---------- 嵌套if Context ----------
if ($request_method = POST) {
limit_req zone=one burst=5;
}
}
location /static/ {
root /var/www/html; # 静态文件
expires 30d; # 缓存时间
# ---------- 嵌套location ----------
location ~* \.(css|js)$ {
gzip_static on;
}
}
location /api/ {
# ---------- 嵌套limit_except ----------
limit_except GET POST {
deny all;
}
}
}
# ---------- 多个Server ----------
server {
listen 443 ssl http2;
server_name secure.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}
}
# ==============================
# Mail Context (邮件代理模块)
# ==============================
mail {
auth_http localhost:9000/auth; # 认证服务器
# ---------- Mail Server ----------
server {
listen 25; # SMTP
protocol smtp;
# ---------- 认证配置 ----------
auth_http_header X-Auth-Key "secret";
}
server {
listen 110; # POP3
protocol pop3;
proxy on;
}
server {
listen 143; # IMAP
protocol imap;
proxy on;
}
}
# ==============================
# Stream Context (四层代理模块)
# ==============================
stream {
# ---------- Stream Upstream ----------
upstream database_cluster {
server 192.168.2.10:3306;
server 192.168.2.11:3306;
# 四层负载均衡
hash $remote_addr consistent; # 一致性哈希
}
upstream redis_cluster {
server 192.168.2.20:6379;
server 192168.2.21:6379;
}
# ---------- Stream Server ----------
server {
listen 13306; # MySQL代理
proxy_pass database_cluster;
proxy_timeout 3s;
# ---------- SSL终止 ----------
ssl_preread on;
}
server {
listen 16379; # Redis代理
proxy_pass redis_cluster;
}
# ---------- UDP代理 ----------
server {
listen 53 udp; # DNS代理
proxy_pass 8.8.8.8:53;
}
}
# ==============================
# 动态模块配置
# ==============================
# 1. RTMP模块 (视频流)
rtmp {
server {
listen 1935; # RTMP端口
chunk_size 4096;
application live {
live on;
record off;
# ---------- 推流配置 ----------
push rtmp://live.example.com;
}
}
}
# 2. Perl模块
perl 'sub {
my $r = shift;
$r->send_http_header("text/html");
return "Hello from Perl!";
}';
# 3. Lua模块
lua_shared_dict my_cache 10m;
由于插件的兼容关系,请使用nginx-1.4.7这个版本
cd ~
# 下载nginx-1.4.7
wget https://nginx.org/download/nginx-1.4.7.tar.gz
tar -xvzf nginx-1.4.7.tar.gz
sudo mv nginx-1.4.7 /usr/local/
通常情况下,客户端(Client)访问网络上的资源,都是发送请求到互联网(Internet),之后导向相应的服务端(Server)获取资源。
正向代理,就是指在Client和Internet之间加一个中间服务,这个服务作为Client的代理人,拦截所有Client发出去的通讯,以代理人的身份再统一发出,从而代表Client和Internet进行交流,避免Client和Internet的直接交流。