Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。官方地址
Nginx解决的问题
系统依赖组件 gcc openssl-devel pcre-devel zlib-devel
安装:
yum install gcc openssl-devel pcre-devel zlib-devel -y
安装包下载地址
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
./configure --prefix=/usr/local/tengine --user=www --group=www echo $? # 如果输出0则下一步 make -j4&&make install # -j 则是调用多核心,进行并行编译。建议是cpu核心的两倍
# 系统用户登录启动服务 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
#启动nginx服务 systemctl start nginx.service #查看服务当前状态 systemctl status nginx.service #重新启动服务 systemctl restart nginx.service #查看所有已启动的服务 systemctl list-units --type=service
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.为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点执行
# 操作用户 #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 ""; } } }
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
经典方向代理结构
upstream httpds { server 192.168.43.152:80; server 192.168.43.153:80; }
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; }
upstream httpds { server 127.0.0.1:8050 weight=5 max_conns=800; server 127.0.0.1:8060 weight=1; }
upstream httpds { server 127.0.0.1:8050 weight=1 max_fails=1 fail_timeout=20; server 127.0.0.1:8060 weight=1; }
轮询+weight、 ip_hash、 url_hash 、least_conn、 least_time
配置一个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;