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个域,每个域含义

常用表达式

*/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上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

经典方向代理结构

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机器。

  1. max_conns

    可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置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 负载均衡算法

轮询+weight、 ip_hash、 url_hash 、least_conn、 least_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

";

check_http_expect_alive http_2xx http_3xx;

以上是 Nginx/Tengine安装配置详解 的全部内容, 来源链接: utcz.com/z/520217.html

回到顶部