一、nginx 简介

Nginx是一款轻量级的Web 服务器/反向代理服务器,占有内存少,并发能力强,官方测试nginx能够支撑5万并发链接,并且CPU、内存等资源消耗却非常低,运行非常稳定。

淘宝的tengine就是基于nginx研发的web服务器

官网:http://nginx.org

中文手册:http://nginx.org/en/download.html

二、nginx 安装

官网:http://nginx.org/en/download.html

麒麟V10服务器离线安装nginx 麒麟 nginx_nginx

上传到linux并解压:tar -zxvf nginx-1.18.0.tar.gz

安装nginx依赖的软件: yum install gcc pcre-devel zlib-devel openssl-devel -y

进入解压后的文件夹执行:./configure "

编译:执行 make 进行编译,编译后才能进行安装

安装:执行 make install 进行安装,安装后,可以看到多了一个名为【nginx】的文件夹

启动Nginx:进入【nginx】文件夹,执行 ./nginx,启动nginx

Nginx默认为80端口,启动后可以在浏览器输入自己的ip和端口号进行验证是否启动成功。

配置环境变量

1.编辑 /etc/profile 文件

vi /etc/profile

2.添加配置:nginx路径

麒麟V10服务器离线安装nginx 麒麟 nginx_麒麟V10服务器离线安装nginx_02

3.刷新

source /etc/profile

4.查看

nginx -v
[root@VM-4-9-centos etc]# nginx -v
nginx version: nginx/1.18.0

nginx配置文件详解

# user 指定运行 nginx 的用户和组(第一个参数为用户第二个为组,这里只有用户)
#user nobody;
# 指定工作进程数(一般设置为CPU核数或者cpu核数的1~2倍)
worker_processes 1;

# 指定错误日志为 logs/ 目录下的 error.log 文件
#error_log logs/error.log;
# 指定错误日志,并指定写入格式为 notice
#error_log logs/error.log notice;
# 指定错误日志,并指定写入格式为 info
#error_log logs/error.log info;

# 指定 pid 文件(存放主进程 pid 号)
#pid logs/nginx.pid;

# nginx 连接配置模块
events {
    # 指定每个工作进程最大连接数为 1024
    worker_connections 1024;
}
# http 配置模块
http {
    # 通过 include 加载 mime.types 文件,里面的 types {} 模块将文件扩展名映射到响应
    的 MIME 类型
    include mime.types;
    # 定义响应的默认 MIME 类型
    default_type application/octet-stream;
    # 写入格式 main 的内容格式如下
    #log_format main '$remote_addr - $remote_user [$time_local] "$request"
    '
    # '$status $body_bytes_sent "$http_referer" '
    # '"$http_user_agent" "$http_x_forwarded_for"';
    # 指定访问日志和写入格式为 main
    #access_log logs/access.log main;
    # 启用或者禁用 sendfile()
    sendfile on;
    # 启用或者禁用使用套接字选项(仅在 sendfile 使用时使用)
    #tcp_nopush on;
    # 0 值禁用保持活动的客户端连接
    #keepalive_timeout 0;
    # 65 s 超时
    keepalive_timeout 65;
    # 启用或者禁用 gzip
    #gzip on;
    # 虚拟主机配置模块
    server {
        # 监听 80 端口
        listen 80;
        # 监听域名为 localhost
        server_name localhost;
        # 将指定的 charset 添加到 “Content-Type” 响应头字段。
        # 如果此charset与source_charset指令中指定的charset不同,则执行转换。
        #charset koi8-r;
        # 指定该虚拟主机的访问日志
        #access_log logs/host.access.log main;
        # 将特定的文件或目录重新定位,如 php 文件,image 目录等
        location / {
            # 设置请求的根目录
            root html;
            # 定义索引,按顺序匹配
            index index.html index.htm;
        }
        # 定义显示 404 错误的 uri
        #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'
        location = /50x.html {
        root html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    # 正则表达式匹配 php 文件
    #location ~ \.php$ {
    # 设置代理服务器的协议和地址,以及应该映射位置的可选URI。作为协议,可以指定“http”或“https”。该地址可以指定为一个域名或IP地址,以及一个可选端口
    # 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 服务器的地址。地址可以指定为一个域名或 IP 地址,以及一个端口
        # fastcgi_pass 127.0.0.1:9000;
        # 设置将在以斜杠结尾的URI之后追加的文件名,
        # fastcgi_index index.php;
        # 设置一个应该传递给FastCGI服务器的参数。
        # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
        # 加载 conf/fastcgi_params 文件
        # include fastcgi_params;
    #}
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
        #location ~ /\.ht {
          # deny all;
        #}
    #}
    # another virtual host using mix of IP-, name-, and port-based configuration
   
    #server {
        # listen 8000;
        # listen somename:8080;
        # server_name somename alias another.alias;
        # location / {
            # root html;
            # index index.html index.htm;
        # }
    #}
    # HTTPS server
    #
    # ssl 配置,要启用 ssl 模块需要在编译 nginx 时加上 --with-http_ssl_module 参数
    #server {
        # listen 443 ssl;
        # server_name localhost;
        # ssl_certificate cert.pem;
        # 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负载均衡
worker_processes 1;

events {
    # 指定每个工作进程最大连接数为 1024
    worker_connections 1024;
}

http {
    include mime.types;
  
    default_type application/octet-stream;
  
    senfile    on;
    #为了测试效果 生产需要按要求配
    keepalive_timeout 0;
    
    upstream xxt {
        server 192.168.0.1:8080;
        server 192.168.0.2:8080;
        server 192.168.0.3:8080;
    }
    
    server {
       listen 80;
       server_name localhost;
       location /{
            proxy_pass http://xxt
        }
    }
}
3.1 负载均衡策略
3.1.1 请求轮询
  • 依次转发给配置的服务器
3.1.2 增加权重
  • 使用服务器权重,还可以进一步影响nginx负载均衡算法,谁的权重越大,分发到的请求就越多。
upstream xxt {
        server 192.168.0.1:8080 weight=1;
        server 192.168.0.2:8080 weight=2;
        server 192.168.0.3:8080 weight=3;
    }
3.1.3 最少连接数
  • 在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。
upstream xxt {
       lest_conn;
        server 192.168.0.1:8080;
        server 192.168.0.2:8080;
        server 192.168.0.3:8080;
    }
3.1.4 IpHash
  • 确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用。
upstream xxt {
       ip_hash;
        server 192.168.0.1:8080;
        server 192.168.0.2:8080;
        server 192.168.0.3:8080;
    }