Nginx/Tengine安装配置详解

1 概念

Nginx (“engine x”) 是一个高性能的 HTTP反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。官方地址
Nginx解决的问题

  • 高并发
  • 负载均衡
  • 高可用
  • 虚拟主机
  • 伪静态
  • 动静分离

2 安装(tengine替换 nginx)

2.1 安装依赖

系统依赖组件 gcc openssl-devel pcre-devel zlib-devel
安装:

yum install gcc openssl-devel pcre-devel zlib-devel -y

2.2 下载安装包

安装包下载地址

cd /usr/local/src && wget http://tengine.taobao.org/download/tengine-2.3.3.tar.gz && tar -zxvf tengine-2.3.3.tar.gz && cd tengine-2.3.3

2.3 编译安装

./configure --prefix=/usr/local/tengine --user=www --group=www
echo $?

如果输出0则下一步
make -j4&&make install
-j 则是调用多核心,进行并行编译。建议是cpu核心的两倍

2.4 启动

2.4.1 设置开机自启

系统用户登录启动服务
vi /lib/systemd/system/nginx.service

添加以下配置

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/tengine/logs/nginx.pid
ExecStartPre=/usr/local/tengine/sbin/nginx -t
ExecStart=/usr/local/tengine/sbin/nginx -c /usr/local/tengine/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

修改可执行权限
chmod 745 nginx.service
设置开启机器

设置开机启动
systemctl enable nginx.service
#停止开启启动
systemctl disable nginx.service

2.4.2 启动

#启动nginx服务
systemctl start nginx.service
#查看服务当前状态
systemctl status nginx.service
#重新启动服务
systemctl restart nginx.service
#查看所有已启动的服务
systemctl list-units --type=service

2.5 日志切割

  1. 创建一个shell可执行文件: cut_my_log.sh,内容为:
#! /bin/bash
#原日志存放路径
LOG_PATH="/usr/local/tengine/logs/"
#按天切割
RECORD_TIME+$(date -d "yesterday" +%Y-%m-%d)
PID=/usr/local/tengine/logs/nginx.pid
#文件命名
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#先Nginx主进程发送型号,用于重新打开日志文件
kill -USR1 'cat $PID'
  1. 配置
1.为cut_my_log.sh添加可执行的权限
chmod +x cut_my_log.sh
2.测试日志切割后的结果
./chmod +x cut_my_log.sh
3.添加定时任务
yum install crontabs
4.编辑并添加一行新的任务:
crontabs -e
内容如下
0 1 * * * /usr/local/nginx/sbin/cut_my_log.sh
重新定时任务
service crond restart

#定时任务其他命令
service crond start
service crond stop
service crond restart
service crond reload
crontab -e //编辑任务
crontab -l //查看任务列表

定时表达式
Cron表达式分为5或6个域,每个域含义

Nginx/Tengine安装配置详解

常用表达式

*/1 * * * * #每分钟执行
59 23 * * * #每日晚上23:59执行
0 1 * * *   #每日1点执行

3 配置解析

操作用户
#user  nobody;

Nginx工作进程 通常与CPU数量相同
worker_processes  1;

错误日志存放路径,日志级别:info notice warn error crit
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";

NGINX进程号
pid        logs/nginx.pid;

#配置工作模式以及连接数
events {
    #默认使用epoll Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    use epoll;

    # 并发总数是 worker_processes 和 worker_connections 的乘积
    # 即 max_clients = worker_processes * worker_connections
    # 并发连接总数需小于系统可以打开的文件句柄总数(cat /proc/sys/fs/file-max)

    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
    # 为什么上面反向代理要除以4,应该说是一个经验值根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:
    # 4 * 8000 = 32000worker_connections 值的设置跟物理内存大小有关
    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
    worker_connections  10240;
}

http模块相关配置
http {
    # 导入外部文件
    include       mime.types;
    #  默认文件类型
    default_type  application/octet-stream;
    # 默认编码
    charset utf-8;
    # 上传文件大小限制
    client_header_buffer_size 32k;

    # 请求日志内容
    #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  logs/access.log  main;
    # 请求日志存放路径
    #access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G"  main;

    # 文件高效传输。sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为on,
    # 如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
    sendfile        on;
    # 当数据包累计到一定大小再发送,需sendfile开启
    #tcp_nopush     on;
    #开启目录列表访问,适合下载服务器,默认关闭。
    #autoindex on;

    #客户端连接Nginx后保存连接时间,浏览器默认60s
    keepalive_timeout  65;

    # 内容传输是否压缩,建议开启.可提升传输显效率节省带宽
    #gzip  on;
    #限制最小压缩,小于100字节不会压缩
    gzip_min_length 100;
    #定义压缩级别,范围1~9(压缩比文件越大,压缩越多,但是CPU使用会越多)
    gzip_comp_level 3;
    # 给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本
    #gzip_vary on;
    #定义压缩文件的类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json

    server{
        listen  80;
        # 多个域名用空格隔开
        server_name localhost;
        # 跨域设置
        # 允许跨域请求的域,*代表所有
        add_header 'Access-Control-Allow-Origin' *;
        # 允许带上cookie请求
        add_header 'Access-Control-Allow-Credentials' 'true';
        # 允许请求的方法
        add_header 'Access-Control-Allow-Methods' *;
        # 循序请求的头
        add_header 'Access-Control-Allow-Headers' *;

        # 防盗链配置,只允许*.imooc.com来源
        valid_referers *.imooc.com
        # 非法引入会进入下方判断
        if($invalid_referer){
            return 404;
        }
        # 路由(优先级:= > ^~ > ~|~* >  /|/dir/)
        #  匹配规则 :
        #       = 精准匹配
        #       正则表达式:
        #               *代表不区分大小写
        location / {
            root    html;
            index   index.html;
        }
        #方式1:所有请求/static路径会映射服务器路径/home/static路径下
        location /static {
            root    /home;
        }
        #【建议使用】方式2:通过别名 所有请求/ss路径会映射/home/static路径下
        location /ss {
            alias   /home/static;
        }
        error_page  500 502 503 504  /50x.html;
        localtion /50x.html {
            root html;
        }
    }

    ##
     #NGINX集群配置
     # weigth:权重,默认1;
     # max_conns:最大连接数,如果worker_processes配置后会受影响使用,
     #            此参数需在NGINX1.11.5之后版本使用,之前版本限制只能在商业版使用
     #            操作最大连接数 返回502
     # max_fails、fail_timeout、slow_start 都必须在2个及以上服务器中使用
     # slow_start:一定时间后缓慢加入集群,需配合weigth使用。在商业版中才能用
     # down :备用机,当其他主机挂掉后 访问会达到备用机
     #
     ##
    upstream tomcats {
        #ip_hash;#通过IP hash取模,通过IP前3段(192.168.23)取模。注释此配置默认使用轮询
        server 192.168.88.101:8080 weigth=1 max_conns=2 slow_start=60s;
        server 192.168.88.102:8080 weigth=1 down;
        server 192.168.88.103:8080 weigth=1;

        #keepalive:保持连接数,提高系统吞吐量
        keepalive 32;
    }
    ##
      # NGINX端缓存设置
      #      proxy_cache_path:设置缓存保存的目录
      #      keys_zone:设置共享内存以及占用的空间大小
      #      max_size:设置缓存大小
      #      inactive:超过此时间,则缓存自动清理
      #      use_temp_path:关闭临时目录
      ##
      proxy_cache_path   /usr/local/nginx/upsteam_cache keys_zone=mycache:5m max_size=1g inactive=300s use_temp_path=off;
    server {
        listen    80;
        server_name   www.tomcats.com;
        localtion / {
            proxy_pass   http://tomcats;

            # 开启缓存
            proxy_cache mycache;
            # 针对200和304状态码的缓存设置过期时间
            proxy_cache_valid 200 304 8h;

            # 配合keepalive使用
            proxy_http_version 1.1;
            # 配合keepalive使用
            proxy_set_header Connection "";
        }
    }
}

4 反向代理

4.1 概念

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。
反向代理Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

Nginx/Tengine安装配置详解

经典方向代理结构

Nginx/Tengine安装配置详解

; 4.2 反向代理配置

  1. upstream
    反向代理配合upstream使用
upstream httpds {
    server 192.168.43.152:80;
    server 192.168.43.153:80;
}
  1. weight(权重)
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpds {
    server 127.0.0.1:8050       weight=10 down;
    server 127.0.0.1:8060       weight=1;
    server 127.0.0.1:8060       weight=1 backup;
}
  • down:表示当前的server暂时不参与负载
  • weight:默认为1.weight越大,负载的权重就越大。
  • backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

  • max_conns
    最大连接数可以根据服务质量来设置,防止挂断,比如1000,我们可以设置800。

    [En]

    The maximum number of connections can be set according to the quality of the service to prevent hanging up, for example, 1000, we can set 800.

upstream httpds {
    server 127.0.0.1:8050    weight=5  max_conns=800;
    server 127.0.0.1:8060    weight=1;
}

  1. max_fails、 fail_timeout
    max_fails:失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2-3次,多的话设置1次
    max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒…以此循环,直到恢复。
upstream httpds {
    server 127.0.0.1:8050    weight=1  max_fails=1  fail_timeout=20;
    server 127.0.0.1:8060    weight=1;
}

4.3 负载均衡算法

轮询+weightip_hashurl_hashleast_connleast_time

4.4 监控检查

配置一个status的location

location /status {
    check_status;
}

在upstream配置如下

check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;

Original: https://www.cnblogs.com/dooor/p/tengine.html
Author: Dvomu
Title: Nginx/Tengine安装配置详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524064/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • docker使用

    什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体…

    Linux 2023年6月14日
    0104
  • 【Linux】在Linux下文件io使用(二)

    在linux下,一切皆文件。当文件被打开时,会返回文件描述符用于操作该文件,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2); 0表示标准输入,1表示标准输出,…

    Linux 2023年6月13日
    0128
  • SQL87 最差是第几名(一)

    本题链接表结构如下所示。 +——-+——–+| grade | number |+——-+&#8…

    Linux 2023年6月13日
    0101
  • LaTeX 数学公式语法

    参考来源: https://blog.csdn.net/anxiaoxi45/article/details/39449445 https://www.cnblogs.com/ya…

    Linux 2023年6月7日
    0107
  • SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search

    Ensure your site or shared folder in one Content Source. Add file types. The second step i…

    Linux 2023年5月28日
    090
  • 浅谈kali : aircrack-ng套件

    aircrack-ng 套件包含有: Name Description aircrack-ng 破解WEP以及WPA(字典攻击)密钥 airdecap-ng airmon-ng 将…

    Linux 2023年6月14日
    081
  • k8安装

    1.安装k8s之前需要安装docker,etcd 因为要在k8s的pod中运行容器,需要先安装 容器运行时(Container Runtimes ) 几种常见的容器运行时与 Kub…

    Linux 2023年6月13日
    0112
  • Linux性能监控-sar

    sar是一个非常全面的一个分析工具,对文件的读写,系统调用的使用情况,磁盘IO,CPU相关使用情况,内存使用情况,进程活动等都可以进行有效的分析。sar工具将对系统当前的状态进行取…

    Linux 2023年6月6日
    0138
  • 页面国际化

    页面国际化 有的时候,我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要对页面进行国际化设计了。 6.1 准备工作 在IDEA中统一设置properties的编码格式 6….

    Linux 2023年6月14日
    0120
  • ArrayList中的遍历删除

    例如我们有下列数据,要求遍历列表并删除所有偶数。 List myList = new ArrayList<>(Arrays.toList(new Integer[]{2…

    Linux 2023年6月13日
    0105
  • 高等代数:4 矩阵的运算

    4 矩阵的运算 1、数域K上两个矩阵称为 相等,如果它们的行数相等,列数也相等,并且它们的所有元素对应相等。 2、定义1:设(A=(a_{ij}),B=(b_{ij}))都是数域K…

    Linux 2023年6月8日
    0111
  • Java的jinfo命令使用详解

    jinfo命令简介 jinfo(Java Virtual Machine Configuration Information)是JDK提供的一个可以实时查看Java虚拟机各种配置参…

    Linux 2023年5月27日
    0128
  • ESXI系列问题整理以及记录——使用SSH为设备打VIB驱动包,同时提供一种对于ESXI不兼容螃蟹网卡(Realtek 瑞昱)的问题解决思路

    对于ESXI不兼容螃蟹网卡的问题,这里建议购买一张博通的低端单口千兆网卡,先使用博通网卡完成系统部署,再按照下文方法添加螃蟹网卡的VIB驱动,最后拆除博通网卡。 螃蟹网卡VIB驱动…

    Linux 2023年6月13日
    0111
  • Java基础 | Stream流原理与用法总结

    Stream简化元素计算; 一、接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式;依旧先看核心接口的设计: B…

    Linux 2023年6月13日
    0122
  • js笔记之while循环

    while循环就是for循环去掉前后两个条件 var i = 0; for( ; i < 10; ){ document.write(i); document.write(&…

    Linux 2023年6月13日
    0113
  • Podman基础用法

    Podman基础 1、什么是Podman? Podman是一种开源的Linux原生工具,旨在根据开放容器倡议(Open Container Initiative,OCI)标准开发、…

    Linux 2023年6月7日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球