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)

大家都在看

  • 一文带你掌握Spring Web异常处理方式

    一、前言 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同事兼好朋友,匆匆赶往…

    Linux 2023年6月6日
    0139
  • Linux、Windows下Redis的安装即Redis的基本使用详解

    前言 什么是Redis Redis是一个基于 内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「 Remote Dictionary …

    Linux 2023年6月6日
    0142
  • 2021年1月-第02阶段-前端基础-HTML+CSS进阶-VS Code 软件

    软件安装 VSCode软件 能够安装 VS Code 能够熟练使用 VS Code 软件 能够安装 VS Code 最常用的插件 1. VS Code简介 1.1 VS Code …

    Linux 2023年6月8日
    0105
  • CentOS/Redflag 7.3安装qemu 5.0记录

    安装实际上相当简单,只需下载源代码并编译即可。 [En] Installation is actually quite simple, just download the sour…

    Linux 2023年5月27日
    0131
  • redis中save和bgsave区别

    SAVE 和 BGSAVE 两个命令都会调用 rdbSave 函数,但它们调用的方式各有不同: SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在…

    Linux 2023年5月28日
    099
  • Centos7 离线安装K3s

    1、安装前准备 github地址:https://github.com/k3s-io/k3s/releases k3s二进制文件:k3s下载地址:github地址 / 百度网盘地址…

    Linux 2023年6月7日
    0159
  • 双系统设置默认启动系统

    在原有windows系统下,我们装完Ubuntu系统后,会出现Ubuntu的grub引导界面(倒计时后自动进入Ubuntu),如下图所示。 假设我们需要将倒计时后默认启动的系统改为…

    Linux 2023年5月27日
    0135
  • Python中str()和repr()的区别

    其实用处就是最大的区别了:str()主要用来为终端用户输出一些信息,而repr()主要用来调试;同时后者的目标是为了消除一些歧义(例如浮点数的精度问题),前者主要为了可读。 In …

    Linux 2023年6月8日
    0138
  • mysql二进制安装脚本部署

    mysql二进制安装脚本部署 mysql二进制安装脚本部署 单实例 使用函数的单实例 使用函数的单实例或者多实例 单实例 [root@localhost ~]# mkdir mys…

    Linux 2023年6月6日
    0142
  • Docker部署Dotnet

    方法一:打包+镜像 部署 将要部署的项目及其依赖的项目上传至指定文件夹下 要部署的项目添加Docker支持,生成Dockerfile文件 将生成的Dockerfile文件上传至要部…

    Linux 2023年6月13日
    0141
  • Python中的对象引用、浅拷贝与深拷贝

    最近项目中遇到一个Python浅拷贝机制引起的bug,由于对于Python中对象引用、赋值、浅拷贝/深拷贝机制没有足够的认识,导致调试了很久才发现问题,这里简单记录一下相关概念。 …

    Linux 2023年6月6日
    0100
  • php连接mysql数据库大批量执行sql语句出现“Mysql server has gong away”错误

    php代码中加入以下代码 set_time_limit(3600); ini_set(‘memory_limit’, ‘1024M’); mysql客户端执行以下命令 set gl…

    Linux 2023年6月13日
    0113
  • shell多线程运行程序

    #!/bin/bash function my_cmd(){ sleep 1 } date tmp_fifofile="/tmp/$$.fifo" mkfifo…

    Linux 2023年6月6日
    0136
  • PHP代码审计_用==与===的区别

    背景介绍 如何审计 绕过案例1 绕过案例2 背景介绍 比较 ==与 ===的差别 == 是等于符号,=== 是恒等于符号,两个符号的功能都是用来比较两个变量是否相等的,只不过两个符…

    Linux 2023年6月6日
    0135
  • pysimpleGui FilesBrowse函数原始说明

    FilesBrowse: (button_text=’Browse’, target=(ThisRow, -1), file_types=((“…

    Linux 2023年6月14日
    088
  • 保罗·艾伦的故事

    上周,保罗·艾伦逝世。《财新周刊》约我写一篇纪念文章,发表在他们杂志上面 一些个人新闻:最近,我了解到我在2009年与之抗争的非霍奇金淋巴瘤已经复发。我已经开始治疗,我的医生很乐观…

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