2-2-运维必备核心技能-nginx基础入门

Nginx的程序架构:
master/worker
一个master进程:---主进程
负载加载和分析配置文件、管理worker进程、平滑升级
一个或多个worker进程---子进程
处理并响应用户请求
缓存相关的进程:
cache loader:载入缓存对象
cache manager:管理缓存对象
特性:异步、事件驱动和非阻塞
并发请求处理:通过kevent、epoll、select、/dev/poll
文件io:高级io sendfile,异步,mmap
nginx模块:高度模块化,但其模块早期不支持dso机制(模块在编译支持时才能用),近期版本支持动态装载和卸载(只对特定模块);
模块分类:---主程序只是一个核心框架,其他功能包括web都是通过模块来实现
核心模块:core module
标准模块:
HTTP modules:
Standard HTTP modules---标准
Optional HTTP modules---可选
Mail modules
Stream modules---流模块,实现传输层4层负载均衡
传输层代理
3rd party modules---第三方模块,非标准,自己打补丁才能用
nginx的功用:
静态的web资源服务器;(图片服务器,或js/css/html/txt等静态资源服务器)
结合FastCGI(反代给fpmserver)/uwSGI/SCGI等协议反代动态资源请求;memcache反代给memcached server,http反代给web server,众多server都可以叫做后端服务器(backend)
http/https协议的反向代理;
imap4/pop3协议的反向代理;
tcp/udp协议的请求转发;
nginx的安装配置;
官方的预制包:
先使用yum info nginx查看一下有没有这个rpm包
http://nginx.org/packages/centos/7/x86_64/RPMS/---自己建立yum仓库指向这里(/etc/yum.repos.d/nginx.repo)
Fedora-EPEL
[nginx]
name=nginx repository
baseurl=http://nginx.org/packages/centos/7/x86_64/RPMS/
gpgcheck=0
yum repolist---查看仓库列表
yum install nginx
或者自己把官方的rpm包下载下来,在本地安装
编译安装:
~]#yum groupinstall "Development Tools" "Server Platform Development"---安装两个组,依然不能解决依赖关系
~]#yum install pcre-devel openssl-devel zlib-devel(网络通信压缩库)
~]#useradd -r nginx---主控进程以root身份运行,worker以普通用户身份运行
~]#./configure --prefix=/usr/local/nginx(默认安装目录) --conf-path=/etc/nginx/nginx.conf(主配置文件路径) --error-log-path=/var/log/nginx/error.log(错误日志路径) --http-log-path=/var/log/nginx/access.log(访问日志路径) --pid-
path=/var/run/nginx.pid(进程文件路径) --lock-path=/var/run/nginx.lock(锁文件路径) --user=nginx --group=nginx(以什么用户组身份运行) --with-http_ssl_module --with-http_v2_module --with_http_dav_module(分布式版本协作,支持put、delete方法的模块,不需要就不安装,不安全) --with-
http_stub_status_module(内建的状态页面类似httpd) --with-threads(线程池管理线程的逻辑,比默认的管理方式(work-process单个进程响应多少请求)更加高效 ) --with-file-aio(文件异步IO)(with额外装载的模块,nginx编译时,有些模块不会编译,会编译的不想使用就用without去掉)
#make&makeinstall
安装以后设置开机自启---自己写一个unitfile
复制一下/usr/lib/systemd/system/nginx.service这个文件(这是指定官方仓库安装后的文件),并修改一下就可以了
systemctl start nginx.service
使用ss -tnlp查看监听端口
使用ps -axu查看nginx有几个worker
程序环境:
配置文件的组成部分:
主配置文件:/etc/nginx/nginx.conf
Include conf.d/*.conf---把这个路径下所有以.conf结尾的配置文件都包含进来
fastcgi,uwsgi,scgi等协议相关的配置文件
mime.types:支持的mime类型---mime多用途互联网邮件扩展
主程序文件:/usr/sbin/nginx---这个主程序文件有很多参数,其中-V会显示编译的选项,我们可以复制,-s reload 可以重新装载配置文件不用重启服务-t可以测试配置文件语法
要想运行服务,可以直接使用命令也可以使用Unit File方式来启用(systemctl start nginx.service,ss -tnlp查看监听的端口,ps -aux查看启动的进程)
配置:
主配置文件的配置指令:
directive value [value2......];
注意:
(1)指令必须以分号结尾;
(2)支持使用配置变量;
内建变量:由nginx模块引入,可直接引用;
自定义变量:由用户使用set命令定义
set variable_name value;---也可以改内建变量的值
引用变量:$variable_name
主配置文件结构:
main block:主配置段,也即全局配置段;
event{
...
};事件驱动相关的配置
http{
...
};http/https协议相关的配置段;
mail{
...
};
stream{
...
};
http协议相关的配置结构---没有中心主机的概念,就算只有一个主机也要配置成虚拟主机
http{
...
...:各server的公共配置
server{
...
}:每个server用于定义一个虚拟主机;
server{
...
listen---监听地址端口
server_name---主机名
root---相当于document_root,指定站点根目录
alias---路径别名
location[OPERATOR] URL{---基于url限制能不能访问,不能基于文件系统(也就是文件路径)
...
if CONDITION{---基于条件来定义
...
}
}
}
}

nginx可以实现event-driven、asynchronous、non-blocking
针对网络IO:
收到用户请求以后,nginx还可以管理缓存,后端服务器响应内容可以保存在nginx本地,然后再给用户响应,第二个用户请求时,查询缓存,如果有直接返回(实现加速)
而这个缓存空间,nginx需要两个进程来管理cache loader,cache manager
针对磁盘IO:
可以是实现高级IO、sendfile、AIO(异步IO模型)、mmap(内存映射,在内存中开辟空间映射硬盘数据,直接访问硬盘数据,不用复制,想想上一节课的两阶段)、etc

nginx作为web server:是一个master/worker模型,master用来装载配置文件,启动worker进程,平滑升级(不用停nginx,就能升级版本)

每次更改nginx的配置以后,要检查一下有没有语法错误nginx -t,并重新载入一下配置nginx -s reload

然后详细讲解安装nginx以后的配置文件/etc/nginx/nginx.conf
user nginx;
worker_processes auto;---配置工作进程数量,这里一般是自动,对应cpu核心数,改为更多意义不大
error_log /var/log/nginx/error.log;---错误日志
pid /run/nginx.pid
worker_cpu_affinity auto;---把进程跟cpu自动一对一绑定

include /usr/share/nginx/modules/*.conf;---动态装载某些模块

events {
worker_connections 1024;---这里对应上边的worker_processes,这里不可随意更改
}

http {
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘---日志格式、日志的名称、内置的变量(客户端地址、远程用户(basic认证使用)、本地时间、请求报文的起始行)
‘$status $body_bytes_sent "$http_referer" ‘---响应码、body部分字节数、引用(从上次访问跳转过来的,怎么到当前网页的)
‘"$http_user_agent" "$http_x_forwarded_for" ‘;---什么浏览器、代理服务器在代理转发时会加一个真正客户端请求地址是谁
access_log /var/log/nginx/access.log main---访问日志、日志名称

sendfile    on;---发送文件,用户请求文件,由内核封装响应报文不用复制文件,提升性能
tcp_nopush  on;
tcp_nodelay on;
keepalive_timeout   65;保持连接的超时时长
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type    application/octet-stream;---默认把每个文件识别成八进制的数据流
#load modular configuration files from the /etc/nginx/conf.d directory.
#see http://nginx.org/en/docs/ngx_core_module.html#include
#for more information.
include /etc/nginx/conf.d/*.conf;

server {
    listen      80 default_server;---基于域名的访问,默认虚拟主机,如果用户访问的虚拟主机找不到,就访问所有虚拟主机的第一个,不想第一个响应就设置默认的
    listen      [::]:80 default_server;---基于ipv6地址的访问
    server_name _;---下划线可以匹配所有主机名
    root        /usr/share/nginx/html;---默认网页根路径

    #load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error page 404 /404.html;---自定义错误页
        location = /40x.html {
    }

    error page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

#setting for a TLS enabled server.
}

那自己添加一个虚拟主机的做法
mkdir /data/nginx/vhost1 -pv ---最好和主机名一致
vim /data/nginx/vhost1/index.html
vim conf.d/vhost1.conf
server {
listen 80;
server_name www.ilinux.io;---给了主机名,访问的就是你定义的,不给访问的就是默认的
root /data/nginx/vhost1;
}
nginx -t测试语法
nginx -s reload重新载入配置文件不用重启

Nginx(2)
配置指令:
main配置段常见的配置命令:
分类:
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置
正常运行必备的配置:
1、user
Syntax:user user [group]---组可以省略
Default:user nobody nobody;
Context:main

                Defines user and group credentials used by worker processes.If group is omitted,a group whose name equals that of user is used.
            2、pid/PATH/TO/PID_FILE:
                指定存储nginx主进程进程号码的文件路径
            3、include file | mask(掩码就是通配符)
                指明包含进来的其他配置文件片段
            4、load_module file
            指明要装载的动态模块
        性能优化相关的配置
            1、worker_processer number | auto;
                worker进程的数量;通常应该等于小于当前主机的cpu的物理核心数;
                auto:当前主机物理cpu核心数
            2、worker_cpu_affinity cpumask ...;---把进程跟cpu一对一绑定,可以提前隔离出cpu再绑定,也可以简单手工绑定(这种效果好),如果只运行nginx可以绑定,如果还要运行其他进程最好不要绑定
                worker_cpu_affinity auto [cpumask];
                cpu mask:---有4个cpu用4个0表示,有8个就用8个0
                    00000001:0号cpu
                    00000010:1号cpu
                    00000100:2号cpu
            3、worker_priority number:
                指定worker进程的nice值,设定worker进程优先级;[-20,20]
            4、worker_rlimit_nofile number;
                worker进程所能够打开的文件数量上限
        调试、定位问题:

原文地址:https://blog.51cto.com/13852573/2364134

时间: 2024-10-16 01:12:07

2-2-运维必备核心技能-nginx基础入门的相关文章

2-4-运维必备核心技能-nginx实现web服务配置

定义客户端请求的相关配置 12.keepalive_timeout timeout [header_timeout] 设定保持连接的超时时长,0表示禁止长连接,默认为75s 13.keepalive_requests number 在一次长连接上所允许请求的资源的最大数量,默认为100,如果第12项设置为0,此项没有用处 14.keepalive_disable none | browser ... 对哪种浏览器禁用长连接,现在绝大多数浏览器都支持,但可以设置禁用(防止爬虫) 15.send_t

2-3-运维必备核心技能-nginx配置文件全面讲解

aio这种逻辑一般只能在磁盘io上实现绑定8颗cpu中的后4颗,从0开始掩码为4.0001 00005.0010 00006.0100 00007.1000 0000看哪个进程运行在哪个cpu上ps axo comm,pid,psr | grep nginxwatch -n.5 'ps axo comm,pid,psr | grep nginx'动态观测0.5秒这个命令的执行结果没有人访问,所以可能不会变化yum install -y httpd-toolsab -n 10000 -c 100

2-5-运维必备核心技能-nginx实现模块化应用实战

nginx如何配置称为https服务器ngx_http_ssl_module模块:---ssl功能仅能够基于ip地址来实现,如果只有一个ip却有多个server,只能有一个是基于ssl的ssl的交互过程:1.三次握手2.服务端发送证书给客户端,并发送支持的加密方式等等3.客户端接收证书,选择验证方式,验证后选择一次性会话密钥,用对方的公钥加密传给服务器,完成密钥交换4.服务端就可以使用这个密码来加密客户端请求的url资源1.ssl on | off;Enables the HTTPS proto

运维工程师必须掌握的基础技能和职业前景

运维工程师必须掌握的基础技能有哪些 运维工程师(Operations),负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率.优化资源利用率提高整体的ROI.这是百度百科对运维工程师的定义.网上有好多大佬对这个问题做了很详细的阐述,这里我简单说一下自己工作接触到的一些技能和工具. 范围:linux运维 网络方面 我感觉网络是作为IT工作人员的基础中的基础,网络的使用贯穿了我们平时工作中,只是不是特别从事网络运维的工程师,很少下精力去研究它.由于我本身就是华为HCNP和华三H3CSE

[运维] 第六篇:告警是数据中心运维的核心驱动力!

告警事件是数据中心运维的核心驱动力,我们做的所有运维工作都是要减少业务出现故障的概率,提供更高的业务可用性.不知道大家是否认可这句话?还是看这张图,通过这张图,把这个问题讲透:        作为综合事件管理平台自身,需要有这样几个部件:1 丰富事件接口.作为数据中心的核心驱动引擎,需要有丰富的事件接口可以将各种IT事件,甚至非IT事件接收过来,常见的接口有rest.web service.snmp.soap.socket.xml.文本.jdbc等.因为面对的对象不同,所以能够使用的方式是完全不

博友话题:运维工程师必须掌握哪些基础技能?

都别再讨论优衣库啦,我们可是热爱技术的IT人.快来关注下本期的博友话题! 众所周知,运维工程师是集合网络.系统.数据库.开发.安全工作于一身的"复合型人才". 随着国内软件行业的发展和扩大化,有更多更复杂的系统出现,为了保证系统的稳定运行,需要有更多优秀的运维工程师.那么一个合格的运维工程师必须掌握哪些基础技能呢?在运维的路上需要注意哪些呢? 亲爱的小伙伴们,让我们一起讨论下:运维工程师必须掌握哪些基础技能呢? PS:小编会根据讨论情况准备神秘礼物给参加活动的小伙伴们哦~ (活动时间2

linux故障定位,运维必备

linux故障定位,运维必备 背景有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源.这时候就需要登录服务器进一步深入分析问题的根源.那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题.所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力.如果我们有一套好的分析工具,那将是事半功倍,能够帮助大家快速定位问题,节省大家很多时间做更深入的事情. 说明本篇文章主要介绍各种问题定位的工具以及会结合案例分析问题. 分析问题的方法论套用5W2H方法,可以

02. SpringCloud实战项目-快速搭建Linux环境-运维必备

SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面试题,夯实Java基础. PassJava 项目可以教会你如何搭建SpringBoot项目,Spring Cloud项目 采用流行的技术,如 SpringBoot.MyBatis.Redis. MySql. Mon

Linux运维系统工程师与java基础学习系列-8

Java天生骄傲系列-8 函数的应用(重点掌握) 如何定义函数 例1: package test.myeclipse;                 publicclass test1 { publicstaticvoid main(String[]args) { int Sum = getSum(); System.out.println("Sum="+Sum); } publicstaticint getSum() { return 3+4; } } 运行结果:Sum=7 例2: