1.io多路复用
2.高性能
3.高并发
4.占用资源少
1.跨平台,配置简单
2.非阻塞、高并发连接:处理2-3万并发连接数,官方检测能支持5万并发,而apache只能1万。
3.内存消耗小
4.成本低,且开源
5.稳定性高,宕机概率非常小
6.内置健康检查功能:如若服务器宕机,会做健康检查,之后收到的请求就不会发送给宕机服务器了,转而发送给其他节点。
1.http服务器
2.虚拟主机
3.反向代理,负载均衡
4.安全管理
5.可以做缓存服务器
nginx | apache |
---|---|
nginx是一个基于时间的web服务器 | apache是一个基于流程的服务器 |
所有请求都由一个线程处理 | 单个线程处理单个请求 |
nginx避免子进程的概率 | apache是基于子进程的 |
nginx占用资源和内存少 | apache占用资源和内存多 |
处理请求异步非阻塞,在高并发下能保持低资源,低消耗,高性能 | 处理请求阻塞 |
编写模块简单 | 编写模块复杂 |
编译安装过程
#关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0
cd /opt
nginx-1.12.0.tar.gz
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些安装的开发包,以便提供相应的库和头文件。
useradd -M -s /sbin/nologin nginx
#创建运行用户、组(Nginx服务程序默认以nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名
--group=nginx \ #指定组名
--with-http_stub_status_module #启用http_ _stub_ status_ module模块以支持状态统计
make -j 4 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t
nginx
#先查看nginx的pid号
cat /usr/local/nginx/logs/nginx.pid
kill -3 pid号 #可以优雅的停止进程:让他先把事情处理完再解决
killall -3 nginx
kill -s quit (pid号)
killall -s quit nginx
nginx -s stop 停止nginx
nginx -s quit 停止nginx
kill -1 (pid号)
kill -s hup (pid号)
killall -1 nginx
killall -s HUP nginx
1.首先先去官网上下载新版本的软件包
tar -zxvf nginx-1.xx.xx.tar.gz
2.进行解压配置编译
cd nginx-1.xx.xx
./configure \ --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
make
3.生成二进制文件,将老版本二进制文件进行备份,防止版本回退
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
4.把更新好的程序复制过来进行替换
cp objs/nginx /usr/local/nginx/sbin/nginx
5.执行make upgrade,完成平滑升级
或者先killall nginx,再/usr/local/nginx/sbin/nginx
理论上查看nginx最大并发:查看他的配置文件
vim /usr/local/nginx/conf/nginx.conf
worker processes (worker工作进程数,一般设置与CPU数量相同,或auto)
*worker_connections (每个worker进程能够处理的连接数)
真正实现的话要去设置
应用级别的打开文件数和系统级别的打开文件数
应用级别:
worker rlimit nofile (worker进程最大可以打开的文件数)
系统级别:
ulimit -n
/etc/security/limits.conf
nofile
vim /usr/local/nginx/conf/nginx.conf
1.全局块:全局配置,对全局生效
2.events块:配置影响nginx服务器与用户的网络连接
3.http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
4.server块:配置虚拟主机的相关参数,一个http块中可以有多个server块
5.location块:用于配置匹配的uri
6.upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分
user nobody
#运行用户,默认为nobody
worker_processes 1
#设置进程数,设置为auto,nginx将会自己获取这个数值
error_log logs/error.log
#错误日志文件的位置
pid logs/nginx.pid
#pid文件的位置
worker_rlimit_nofile 65535
#设置所有worker进程最大可以打开的文件数,默认为1024
events {
use epoll;
#使用 epoll I/0模型,2.6及以上版本的系统内核,建议使用epoll模型以提高nginx性能
worker_connections 65535;
#设置进程连接数,每个进程处理 65535 个连接
}
#永久设置可打开最大文件数
vim /etc/security/limits.conf nginx hard nofile 10000 用户名 硬限制 最大进程数 进程数
ulimit -a #查看可同时打开文件数
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"
# '"Shttp_user_agent" "$http_x_forwarded_for"' ;
##访问日志位置
#access_log logs/access.log main;
##支持文件发送(下载)
sendfile on;
##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#tcp_nopush 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;
}
}
}
日志格式设定:
$remote_addr(记录的是上个节点的ip)与$http_x_forwarded_for(会记录数据包经过的所有的ip)用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url路径与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小(响应体大小);
$http_referer:用来记录从哪个页面链接访问过来的(如果数据包经过转发他会记录下
来);
$http_user_agent:记录客户浏览器的相关信息;
root:根目录
location /test {
root/var/www;
}
处理方式:root路径+location路径
http://192.168.116.40/test/abc.html ——> /var/www/test/abc.html
alias:虚拟目录、别名目录
location/test {
alias /var/www;
}
处理方式:alias路径替换location路径
http://192.168.116.40/test/abc.html ———>/var/www/abc.html
1.安装时添加--with-http_stub_status_module模块
2.修改nginx配置文件添加stub_status on; (开启状态统计功能) access_log 0ff;配置
3测试验证curl -Ls xxx
安装htp
1.使用htpasswd生成用户认证文件,并修改权限和归属
2.修改nginx配置文件添加auth_basic auth_basic_user_file(指定认证文件路径)配置
3.测试验证
http{ } :所有站点生效
server{ }:只在当前站点中生效
location{ }:只在当前站点的指定URL路径进行生效
在他们中添加配置
白名单:allow ip/网段(一行只能配置一个ip或者网段)
deny all
黑名单:deny ip/网段
基于域名:server_name
基于ip:listen ip:端口(根据不同的ip)
基于端口:listen ip:端口(根据不同的端口)
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
#htpasswd创建用户时的认证数据文件,里面去指定用户密码
chown nginx /usr/local/nginx.passwd.db
chmod 400 /usr/local/nginx/passwd.db
vim /usr/local/nginx/conf/nginx.conf
.....
server {
location / {
.....
##添加认证配置##
auth_basic "secret"; #设置密码提示框文字信息
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}
nginx -t
systemctl restart nginx
浏览器访问 http://192.168.116.40