Nginx先容及使用

打印 上一主题 下一主题

主题 1539|帖子 1539|积分 4617

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.Nginx先容

Nginx是一款开源的、高性能的HTTP和反向署理服务器
1.正向署理和反向署理

正向署理(署理客户端)是一种位于客户端和目标服务器之间的中心折务器。客户端通过正向署理服务器向目标服务器发送哀求,署理服务器将哀求转发给目标服务器,并将目标服务器的相应返回给客户端
反向署理(署理服务端)客户端的哀求首先发送到反向署理服务器,反向署理服务器再将哀求转发到后端的服务器。后端服务器处理哀求后,将相应返回给反向署理服务器,反向署理服务器再将相应返回给客户端。
2.负载均衡(Load Balancing)

负载均衡用于在多个服务器之间分配客户端的哀求,以优化资源利用、提高体系的可用性和可靠性。
主要功能


  • 流量分配

    • 根据预设的算法(如轮询、最少连接、加权等),将客户端的哀求分配到差别的服务器上,制止某一台服务器过载。
    • 常见的算法包括:

      • 轮询(Round Robin):按次序依次分配哀求。
      • 最少连接(Least Connections):优先分配到当前连接数最少的服务器。
      • 加权轮询(Weighted Round Robin):根据服务器的权重分配哀求。
      • 加权最少连接(Weighted Least Connections):结合权重和连接数分配哀求。
      • IP哈希(IP Hash):根据客户端的IP地址进行哈希盘算,将哀求分配到固定的服务器。


  • 故障转移(Failover)

    • 当某一台服务器出现故障时,能够自动将流量切换到其他健康的服务器上,确保服务的持续可用。
    • 负载均衡器会定期检查后端服务器的健康状态,自动移除故障服务器,并重新分配流量。

3.Nginx

主要特点


  • 高性能

    • Nginx接纳事件驱动的异步非壅闭架构,能够处理大量的并发连接,性能优于传统的Apache服务器。
    • 它可以轻松处理数万个并发连接,得当高流量的网站。

  • 反向署理和负载均衡

    • Nginx可以作为反向署理服务器,将客户端哀求转发到后端的多个服务器上,并根据设置的策略进行负载均衡。
    • 支持多种负载均衡算法,如轮询、最少连接、IP哈希等。

  • 静态文件服务

    • Nginx对静态文件(如HTML、CSS、JavaScript、图片等)的处理非常高效,可以直接从磁盘读取文件并返回给客户端,减少后端服务器的负担。

 2.Nginx启动和停止

1. 启动 Nginx

  1. sudo systemctl start nginx
复制代码
  1. sudo nginx
复制代码


  • 阐明:启动 Nginx 服务。
2. 停止 Nginx

bash复制
  1. sudo systemctl stop nginx
复制代码
或者
bash复制
  1. sudo nginx -s stop
复制代码


  • 阐明:立即停止 Nginx 服务。
3. 重启 Nginx

bash复制
  1. sudo systemctl restart nginx
复制代码
或者
bash复制
  1. sudo nginx -s reload
复制代码


  • 阐明:重新加载 Nginx 设置文件而不中断现有连接。
4. 重新加载设置文件

bash复制
  1. sudo nginx -s reload
复制代码


  • 阐明:重新加载 Nginx 设置文件而不中断现有连接。如果设置文件有语法错误,Nginx 会拒绝加载。
3.Nginx设置
/etc/nginx/nginx.conf
nginx.conf
├── 全局块
├── events 块
└── http 块
    ├── 通用设置(日记、MIME等)
    ├── server 块(一个网站)
    │   ├── listen / server_name
    │   ├── location /(静态文件或反向署理)
    │   └── error_page
    └── ...
 
  1. # 全局块
  2. user  nginx;
  3. worker_processes  auto;
  4. error_log  /var/log/nginx/error.log warn;
  5. pid        /var/run/nginx.pid;
  6. # 事件块
  7. events {
  8.     worker_connections  1024;
  9. }
  10. # HTTP 块
  11. http {
  12.     include       mime.types;
  13.     default_type  application/octet-stream;
  14.    
  15.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  16.                       '$status $body_bytes_sent "$http_referer" '
  17.                       '"$http_user_agent" "$http_x_forwarded_for"';
  18.    
  19.     access_log  /var/log/nginx/access.log  main;
  20.    
  21.     sendfile        on;
  22.     keepalive_timeout  65;
  23.      # 1️⃣ 定义后端服务集群(upstream)
  24.     upstream my_backend {
  25.         server 127.0.0.1:8081 weight=3 max_fails=3 fail_timeout=30s;
  26.         server 127.0.0.1:8082 weight=1;
  27.     }
  28.     # 服务器块
  29.     server {
  30.         listen       80;
  31.         server_name  localhost;
  32.         # 位置块
  33.         location / {
  34.             root   /usr/share/nginx/html;
  35.             index  index.html index.htm;
  36.         }
  37.         # 错误页
  38.         error_page  404              /404.html;
  39.         location = /404.html {
  40.             root   /usr/share/nginx/html;
  41.         }
  42.         # 反向代理示例
  43.         location /api/ {
  44.             proxy_pass http://127.0.0.1:8080;
  45.             proxy_set_header Host $host;
  46.             proxy_set_header X-Real-IP $remote_addr;
  47.         }
  48.     }
  49. }
复制代码
 proxy_set_header Host $host;



  • proxy_set_header 指令用于设置转发哀求时的 HTTP 头。
  • Host $host; 表如今转发哀求时,将原始哀求的 Host 头设置为 $host(即客户端哀求的域名或 IP 地址)。这确保后端服务器能够正确处理哀求,因为它知道哀求原本是针对哪个域名的。
proxy_set_header X-Real-IP $remote_addr;



  • 这行设置设置了 X-Real-IP 头,值为 $remote_addr,即客户端的真实 IP 地址。
  • 由于 Nginx 作为署理服务器,后端服务器看到的哀求来源是 Nginx 的 IP 地址(通常是 127.0.0.1)。通过设置 X-Real-IP,后端服务器可以知道实际发起哀求的客户端 IP 地址。

用途设置示例静态文件服务location / { root /path/to/html; }反向署理proxy_pass http://backend;负载均衡upstream backend { server 127.0.0.1:8001; server 127.0.0.1:8002; }HTTPS 设置使用 listen 443 ssl; 和 ssl_certificate 等参数 3.Nginx安装

1. 什么是 --with-stream?

这个参数是用来启用 Nginx 的 Stream 模块的。


  • 默认情况下,Nginx 只支持 HTTP、HTTPS 等基于应用层的协议。
  • 加上 --with-stream,你就可以让 Nginx 作为 TCP 或 UDP 的反向署理使用,比如:

    • 署理 MySQL、Redis、FTP 等 TCP 服务
    • 或者署理 DNS、QUIC 等 UDP 服务

2. 源码安装 Nginx 并启用 --with-stream

1 下载官方 Nginx 源码包:

  1. wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0
复制代码
2. 设置编译选项(重点是加上 --with-stream):

  1. ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-stream \ --with-stream_ssl_module
复制代码
3. 编译并安装:

  1. make -j$(nproc) sudo make install
复制代码
安装完成后,nginx 会被装在 /usr/local/nginx 下。
4.验证安装是否成功

  1. /usr/local/nginx/sbin/nginx -V
复制代码
  1. #启动 nginx:
  2. sudo /usr/local/nginx/sbin/nginx
  3. #然后查看是否启动成功:
  4. ps aux | grep nginx
复制代码
5.设置 nginx 下令软链接(可选)

  1. sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
复制代码
以后就可以直接用 nginx 下令了。
4.Nginx使用

1.准备多个后端服务

方法1:使用 nc(netcat)模拟 TCP 服务

使用 nc 模拟两个简朴的 TCP 服务,分别在端口 5001 和 5002 上监听。
  1. # 模拟两个 TCP 后端服务器(不同端口)
  2. nc -lk 5001 <<< "hello from backend 1"
  3. nc -lk 5002 <<< "hello from backend 2"
复制代码


  • -l:监听模式。
  • -k:在连接关闭后继续监听。
  • <<<:将字符串作为输入通报给 nc。
这样,你就有两个简朴的 TCP 服务,分别在 5001 和 5002 上监听。
2. 设置 Nginx 的 stream 负载均衡

编辑你的 Nginx 设置文件 /usr/local/nginx/conf/nginx.conf,添加如下内容(保存原来的 events {} 块):
  1. stream {
  2.     upstream backend_group {
  3.         least_conn;  # 负载均衡策略:最少连接,可改为 round-robin(默认)
  4.         server 127.0.0.1:5001 weight=1 max_fails=2 fail_timeout=20s;
  5.         server 127.0.0.1:5002 weight=2 max_fails=4 fail_timeout=40s;
  6.                      # fail_timeout 多长时间内允许服务器失败的次数达到 max_fails
  7.     }
  8.     server {
  9.         listen 6000;
  10.         proxy_pass backend_group;
  11.         proxy_connect_timeout 3s;  # 设置 Nginx 与后端服务器建立连接的超时时间
  12.         tcp_nodelay on;  # 禁用 Nagle 算法
  13.     }   
  14. }
复制代码
  1. nginx -t
  2. sudo nginx -s reload
复制代码
3.测试负载均衡是否见效

使用 telnet 或 netcat 连接 Nginx 暴露的端口:
  1. nc 127.0.0.1 6000
复制代码
多次连接,或者从多个终端连接,你应该会轮流连接到 5001 和 5002,分别输出差别的 "hello from backend"。
  1. for i in {1..10}; do nc 127.0.0.1 6000; done
复制代码
观察输出是否轮流从两个后端返回。
5.查看网络连接状态

  1. sudo netstat -tanp
复制代码
是一个常用的 Linux 下令,用于表现当前体系中全部网络连接的状态。这个下令可以帮助你查看哪些历程正在监听特定端口,以及当前的网络连接情况。
下令表明



  • netstat:表现网络连接、路由表、接口统计等网络相关信息。
  • -t:表现 TCP 连接。
  • -a:表现全部网络连接(包括监听和非监听状态)。
  • -n:表现数字形式的地址和端口,而不是解析为域名或服务名称。
  • -p:表现每个连接的历程 ID 和历程名称。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表