Nginx服务基础
Nginx概念:
一款高性能、轻量级Web服务软件
稳定性高
系统资源消耗低
对HTTP并发连接的处理能力高
单台物理服务器可支持30 000~50 000个并发请求
Nginx和Apache区别
安装Nginx
.先关闭防火墙
.安装Nginx 选择官网搜索安装
然后解压这个文件
然后安装Nginx的相关文件
创建nginx用户
安装相关配置
I/O 事件配置
events {
use epoll; #使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 65535; #每个 worker 子进程能够处理的最大并发连接数
multi_accept on; #是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接
accept_mutex on; #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
}
#如提高每个进程的连接数还需执行“ulimit -HSn 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
#worker_processes的值和work_connections的值决定了最大并发数量,最大并发数计算方式为:worker_processes*worker_connections。但在反向代理场景中计算方法不同,因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为:worker_processes*worker_connections/2。
HTTP 配置
http {
##文件扩展名与文件类型映射表
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;
##开启高效的文件传输模式
sendfile on;
##开启tcp_nopush和tcp_nodelay用于防止网络阻塞
tcp_nopush on;
tcp_nodelay on;
##连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
##gzip模块设置,设置是否开启gzip压缩输出
#gzip on;
Web 服务的监听配置
server {
##监听地址及端口
listen 80;
##站点域名,可以有多个,用空格隔开
server_name www.kgc.com;
##网页的默认字符集
charset utf-8;
##根目录配置
location / {
##网站根目录的位置/usr/local/nginx/html
root html;
##默认首页文件名
index index.html index.php;
}
##内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
##错误页面配置
location = /50x.html {
root html;
}
}
}
Nginx 的最大并发如何设置?
nginx应用程序配置文件设置 :
worker_processes(工作进程数,一般设置为与CPU数量相同,或auto)
worker_connections(每个worker进程能够处理的连接数)
worker_rlimit_nofile(设置每个worker进程最大可以打开的文件数)
nginx服务器系统设置 :
ulimit -n 65535 #指定进程能够打开的文件数
vim /etc/security/limits.conf --> * soft nofile 65535
* hard nofile 65535
日志格式设定:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
nginx 服务器当前的并发量怎么看?
1)开启状态统计模块 --with-http_stub_status_module ,修改配置文件 开启状态统计功能 stub_status on; ,访问状态统计页面,看 Active connections: 行的数组
2)ss -antp | grep nginx | grep -c ESTAB
netstat
nginx 访问状态统计
1安装nginx时添加状态统计模块 ./configure --with-http_stub_status_module
2修改配置文件,开启状态统计功能 stub_status on; access_log off;
3测试验证 curl -s
nginx 访问认证
1)安装 httpd-tools 软件包,使用 htpasswd 生成用户认证文件,并修改文件的归属nginx和权限400
2)修改配置文件,添加 basic_auth basic_auth_user_file 配置
3)测试验证
nginx 访问控制
在 http{...}配置块(对所有站点生效) server{...}配置块(对当前站点所有的访问路径生效) location{...}配置块(只对当前站点指定的URL访问路径生效) 中添加配置
黑名单配置 deny IP|网段;
白名单配置 allow IP|网段;
deny all;