以下是我个人见解, 不喜勿喷, 如有错误, 还望各路大神多多指教
简介
Nginx 是一个高性能的 HTTP 和 反向代理服务器.
主要特点:
1. 占用内存比较少
2. 并发能力强
3. 处理静态页面性能非常强
Nginx由内核跟模块组成
Nginx相比Apache
1. 高并发响应性能非常好,官方Nginx处理静态文件并发5w/s
2. 反向代理性能强
3. 内存和cpu占用率低(为Apache 的 1/5 ~ 1/10)
4. 对后端服务由健康检查功能
5. 支持PHP cgi方式和 fastcgi方式
6. 配置代码简洁而且容易上手
工作原理及安装配置
安装配置
Nginx启动:由主进程和工作进程组成
常用命令
这些命令在Nginx目录的/sbin/
下执行
./nginx 启动
./nginx -s reload 重新加载配置
./nginx -s reopen 重启
./nginx -s stop
ps -ef | grep nginx 查看nginx进程
./nginx -v 查看版本
./nginx -V 查看版本和详细参数
Nginx升级
借鉴博客
Nginx平滑升级
nginx启动、重启、重新加载配置文件和平滑升级
将nginx1.10.3升级成1.12.2
查看nginx进程
ps -ef | grep nginx
查看nginx参数
./nginx/sbin/nginx -V
解压新版本,进入目录,复制当前版本参数, 上面查看到的 configure arguments:
./nginx-1.12.2/configure --prefix=/home/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/home/pcre-8.32
编译不安装,以免覆盖旧的文件
make
备份
cp /home/nginx/sbin/nginx /home/nginx/sbin/nginx1.10.old
将新版本nginx-1.12.2/objs/nginx 复制到旧版本的sbin下
cp ./objs/nginx /home/nginx/sbin/nginx
查看旧版本pid
cat /home/nginx/logs/nginx.pid
或者
ps -ef | grep nginx(这里是603)
xxx 603 1 0 16:05 ? 00:00:00 nginx: master process ./nginx
nginx会将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后用新的可执行文件启动一个新的nginx主进程和对应的工作进程,并新建一个新的nginx.pid保存新的主进程号,这时,nginx的新的实例和旧的实例同时工作,共同处理请求连接.
kill -usr2 603
给旧的主进程发送WINCH信号,kill -WINCH 旧的主进程号
旧的主进程号收到WINCH信号后,将旧进程号管理的旧的工作进程优雅的关闭.
即一段时间后旧的工作进程全部关闭,只有新的工作进程在处理请求连接.
这时,依然可以恢复到旧的进程服务,因为旧的进程的监听socket还未停止
kill -winch 603
给旧的主进程发送QUIT信号,使其关闭
给旧的主进程发送QUIT信号后,旧的主进程退出,并移除logs/nginx.pid.oldbin文件,nginx的升级完成
kill -quit 603
Ngixn配置
#user nobody; 定义Nginx运行的用户和用户组
worker_processes 8; 启动的进程数
#以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。
#如果一定要设的话,用0和1指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。
#优化让cpu处理更加均匀,更强
#worker_cpu_affinity 00000001 00000010 00000100 00001000
# 00010000 00100000 01000000 10000000
#一个nginx进程打开的最多文件描述符数目
理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除
但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致
#vim /etc/security/limits.conf
# * soft nproc 65535
# * hard nproc 65535
# * soft nofile 65535
# * hard nofile 65535
#worker_rlimit_nofile 65535;
#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#指定进程id存储位置
#pid logs/nginx.pid;
events {
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型.
use epoll;
#注意:最大客户数也由系统的可用socket连接数限制(~ 64K)所以设置不切实际的高没什么好处
worker_connections 65535;
#每个进程可以处理的最大连接数,理论上每台nginx服务器的最大连接数为
#worker_processes*worker_connections。
#理论值:worker_rlimit_nofile/worker_processes worker_connections 1024;
#worker工作方式:串行(一定程度降低负载,但服务器吞吐量大时,关闭使用并行方式)默认off
#multi_accept on;
}
http {
#设置mime类型,mime类型由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"';
#access_log logs/access.log main;
#默认编码
#charset utf-8;
#开启目录列表访问,使用于下载服务器,默认关闭.
#类似镜像站如:阿里云仓库 http://maven.aliyun.com/nexus/content/groups/public/
#autoindex on
#是否调用sendfile(zero copy方式)输出文件
#普通应用必须设置为on
#如果做为下载应用,可以设置为off,平衡磁盘与网络的I/O处理,降低系统的uptime
sendfile on;
#响应客户端超时时间
send_timeout 10;
#防止网络阻塞
#tcp_nopush on;
#提高数据的实时响应性
#tcp_nodelay on;
#服务器名字的hash表大小
server_names_hash_bucket_size 128;
#超时时间,客户端与服务端的持续连接时间
#keepalive_timeout 0;
keepalive_timeout 65;
#指定客户端请求中较大的消息头的缓存最大数量和大小。
large_client_header_buffers 4 64k;
#客户端请求单个文件的最大字节数
client_max_body_size 8m;
#缓冲区代理缓冲用户端请求的最大字节数
client_body_buffer_size 128k;
#客户端请求头读取超时时间
client_header_timeout 10;
#设置客户端请求主体读取超时时间
client_body_timeout 10;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
#发送超时,后端服务器数据回传时间
proxy_send_timeout 90;
#接受超时,连接成功后服务器端响应的时间
proxy_read_timeout 90;
#设置代理服务器保存用户的信息缓冲区大小
proxy_buffer_size 4k;
#缓冲区,网页平均大小在32k的情况下,可以这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小,proxy_buffers*2
proxy_buay_buffers_size 64k;
#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
#fastcgi_connect_timeout 300;
#fastcgi_send_timeout 300;
#fastcgi_read_timeout 300;
#fastcgi_buffer_size 64k;
#fastcgi_buffers 4 64k;
#fastcgi_busy_buffers_size 128k;
#fastcgi_temp_file_write_size 128k;
#gzip模块设置
#开启gzip压缩
#gzip on
#最小压缩文件大小
#gzip_min_length 1k;
#压缩缓冲区
#gzip_buffers 4 16k
#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
#gzip_http_version 1.1;
#压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大
#如:一个100k的文件压缩:级别2压缩后 80k,级别9压缩后 10k
#gzip_comp_level 2;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn
#gzip_type text/plain text/css application/x-javascript application/xml;
#前端缓存服务器缓存经过压缩的页面
#gzip_vary on;
#引入配置文件如,自定义虚拟主机
include vhost.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location / {
#限制IP访问
deny 192.168.0.2;
allow 192.168.0.0/24;
allow 192.168.1.1;
deny all;
}
#静态文件直接从目中读取
location ~.*\.(html|htm|gif|jpg|jpeg|bmp|pgn|ico|txt|js|css) {
root /static;
#定义用户浏览器缓存时间
expires 3d;
}
#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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
博客借鉴
Nginx简介及配置文件详解
以后慢慢写
..