服务(第五篇)Nginx!!!
Nginx和Apache的差异?
Nginx是一个基于事件的Web服务器,Apache是一个基于流程的Web服务器;
Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;
Nginx异步非阻塞的,Apache是阻塞的;
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
Nginx支持热部署,Apache不支持热部署;
Nginx对于静态文件处理具有更高效率,Apache相对一般;
Nginx在反向代理场景具有明显优势,Apache相对一般。
nginx 应用场景
① 静态服务器 (图片、视频服务、文本)
② 动态服务
③ 反向代理, 负载均衡
④ 缓存服务
nginx有几种进程,都是什么功能?
①master process:管理工作进程的,读配置文件
②woker process:处理客户的连接请求(可有多个)
一、编译安装nginx
①关闭防火墙,准备安装包
②安装依赖环境
yum install -y gcc gcc-c++ make zlib-devel openssl-devel pcre-devel
③解压和编译安装
④创建nginx用户
⑤ 优化
⑥添加nginx服务
二、nginx新版本升级:
首先解压最新版本的包:
把老版本的文件处理一下
然后进入新版本的解压文件里面进行编译安装(注意这里只能make不能安装)
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
然后找到objs这个文件夹里面把nginx复制到默认目录中
升级完成!!
三、nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
-
main
全局配置,对全局生效; -
events
配置影响Nginx
服务器与用户的网络连接; -
http
配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置; -
server
配置虚拟主机的相关参数,一个http
块中可以有多个server
块; -
location
用于配置匹配的uri
; -
upstream
配置后端服务器具体地址,负载均衡配置不可或缺的部分;
①全局配置
#user nobody; #运行用户,若编译时未指定则默认为 nobody
worker_processes 4; #工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了,也可以auto
#error_log logs/error.log; #错误日志文件的位置
#pid logs/nginx.pid; #PID 文件的位置
②I/O 事件配置
events {
use epoll; #使用 epoll 事件模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 4096; #每个进程处理 4096 个连接
}
#如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
/etc/security/limits.conf
#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
若工作进程数为 8,每个进程处理 4096 个连接,则允许 Nginx 正常提供服务的连接数
已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性
能表现。
③HTTP 配置
使用“http { }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保
持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包
含在子界定标记“server { }”内
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 on; #此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#keepalive_timeout 0; #连接保持超时时间,单位是秒
keepalive_timeout 65;
#gzip on; #gzip模块设置,设置是否开启gzip压缩输出
#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与$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地址和原来客户端的请求的服务器地址。
访问状态统计配置:
首先进行备份(谨慎!!!)
配置问价修改添加状态配置相关信息
配置好了重新加载服务:systemctl reload nginx
第一个3:已处理的连接数
第二个3:已经tcp三次握手的连接
5:已处理的请求数
基于授权的访问控制:
①生成用户密码认证文件(htpasswd)
如果没有就yum安装一个httpd-tools工具
②修改主配置文件相对应目录,添加认证配置项
systemctl reload nginx
虚拟主机:
①基于域名:
设置相同ip的不通域名:(/etc/hosts)
递归创建/var/www/html/kgc benet 目录
写入内容到文件并取名
修改配置文件,添加虚拟主机的内容
②基于ip
ifconfig ens33:0 192.168.169.100 netmask 255.255.255.0
③基于端口
nginx检测异常客户ip自动化处理脚本:
nginx是一个高并发、高性能、低能耗、开源、轻量级的web服务器!!!