1、 官网http://nginx.org/ 下载对应的nginx包
2、 上传nginx到linux服务器
3、 安装依赖环境
1. 安装gcc环境
* yum install gcc-c++
2. 安装PCRE库,用于解析正则表达式
* yum install -y pcre pcre-devel
3. 安装zlib压缩和解压缩依赖
* yum install -y zlib zlib-devel
4. SSL安全的加密的套接字协议层,用于HTTP安全传输,也就是https
* yum install -y openssl openssl-devel
4、 解压,需要注意,解压后得到的是源码,需要编译后才能安装
* tar -zxvf nignx-1.16.1.tar.gz
5、编译之前,先创建nginx临时目录,如果不创建,在启动nignx的过程中会报错
* mkdir /var/temp/nginx -p
6、在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure \
--prefix=/usr/loacl/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
7、make编译
* make
8、安装
* make install
9、进入sbin目录启动nginx
* ./nginx
* 停止 ./nignx -s stop
* 重新加载 ./nignx -s reload
* 检测配置文件 ./nginx -t
10、打开浏览器,访问服务器内网ip即可打开nginx默认页面
注意事项:
主进程只有一个,工作进程默认只有一个,可以在配置文件中进行修改。
#user nobody;
worker_processes 1;
例如,操作人发送停止信号,master令worker执行,此时worker1、worker2是没有客户端连接的,worker1、worker2立即停止;但worker3此时有客户端请求连接,worker3不会立刻停止,会等到客户端连接关闭,也就是请求处理完成之后,再做停止。
如图,当一个master进程fork了3个worker进程,当一个客户端请求进入,三个worker进程会对互斥锁(accept_mutex)进行抢占,抢到的worker与client建立关系,处理请求。
当client1阻塞住后,client2、client3需要等待client1响应结束。
为了解决这种方式,master会fork一个新的worker2进程,client2、client3会被worker2接受请求处理响应,如果client2也阻塞住,master再fork一个新的worker3进程,client3被worker3接受请求处理响应。(同步阻塞)
缺点:性能较低,当并发达到几十万、几百万之后,服务器需要开很多进程处理很多客户端,如果都是阻塞的情况下,对服务器资源开销是十分大的。
当client1阻塞时,此时又有client2、client3请求worker1,由于nginx是异步非阻塞的(多路复用器),所以worker1可以在处理时发现client1被阻塞,就会继续处理client2,如果client2也被阻塞,他会继续处理client3。
这主要是因为worker1可以在配置文件中设置,use epoll,linux上默认是epoll,nginx会根据不同的操作系统使用不同的工作模式,如果是windows或者mac os,epoll是需要设置的。
epoll如果使用之后,一个worker可以处理差不多6~8万个请求,并发高,并且worker处理请求数量是和cpu、内存相关的。
对比传统的服务器模型,传统服务器可能会fork出很多个worker进程,但是nginx的worker进程会很少。所以nginx的性能是非常高的。
nginx.conf
events {
# 默认使用epoll
use epoll;
# 每个worker允许连接的客户端最大连接数
worker_connections 1024;
}
# 操作worker的用户 默认是nobody
user root;
# 开启worker进程数量 默认是1
#(与CPU相关 CPU有几个 worker就可以是几 如果有其他中间件: 可以为 worker_processes=n-1)
worker_processes 1;
# nginx日志配置 日志级别: debug、info、notice、warn、error、crit
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
# nginx进程号文件
#pid logs/nginx.pid;
events {
# 默认使用epoll
use epoll;
# 每个worker允许连接的客户端最大连接数
worker_connections 1024;
}
http {
# 包含导入外部文件 mime.types 提高可读性
include mime.types;
# 默认响应类型
default_type application/octet-stream;
# 默认日志格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# 所有http请求会记录在access.log文件中
#access_log logs/access.log main;
# 文件传输性能提升 on 打开
sendfile on;
# 需要和sendfile一起使用,当sendfile为on,当数据包累计到一定大小后,再进行发送
#tcp_nopush on;
# 客户端连接超时时间,默认为0,单位是秒;
keepalive_timeout 65;
# 压缩,像html、css、js经过压缩后传输,提升传输效率,但是消耗CPU资源
#gzip on;
# 虚拟服务器
server {
# 监听端口号
listen 80;
# 监听ip/域名
server_name localhost;
# 路由
location / {
root html;
index index.html index.htm;
}
#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 {
root html;
}
}
}
}
./nginx -s stop 快速停止Nginx (暴力关闭)
./nginx -s quit 停止Nginx (针对Http请求,如果有用户连接会维持用户连接,直到客户连接断开,关闭Nginx)
./nginx -t 检查配置文件
./nginx -v 展示Nginx版本号
./nginx -V 展示Nginx具体信息
./nginx -h 帮助命令
./nginx -c (切换)指定Nginx配置文件
./nginx -s reload 重新读取配置文件
1、创建一个shell的可执行文件 cut_my_log.sh
#!/bin/bash
# 日志文件路径
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
# pid文件路径
PID=/var/run/nginx/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`
2、为cut_my_log.sh添加可执行的权限:
chmod +x cut_my_log.sh
3、测试日志切割后的结果:
./cut_my_log.sh
1、安装定时任务
yum install crontabs
2、crontab -e 编辑并添加一行新的任务
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
3、重启定时任务
service crond restart
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
crontab -e //编辑任务
crontab -l //查看任务列表