(一) nginx 介绍, 安装,nginx命令,配置,性能优化

文章目录

  • 四. nginx介绍

    • nginx的程序架构
  • nginx模块

  • nginx的功功能

  • nginx的安装

      • 可以创建软连接
  • 也可以复制服务脚本

  • 重点------- nginx命令

  • 五. nginx配置

    • 全局配置
  • 性能优化相关的配置(全局)

  • 事件驱动相关的配置(events中)

  • 调试和定位问题(全局)

  • 配置实例

四. nginx介绍

=============================================================================

apache用的io模型是select

nginx用的是epool

所以nginx优于apache

nginx有商业版和社区版

nginx 是免费,开源,高性能的HTTP和反向代理服务器,邮件代理服务器,通用TCP/UDP代理服务器

解决C10K问题(10K Connections)

官网:http://nginx.org

nginx的其它的二次发行版

Tengine:由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。

Tengine成为一个开源项目,官网 http://tengine.taobao.org/

OpenResty:基于 Nginx 与 Lua 语言的高性能 Web 平台,

官网:http://openresty.org/cn/

特性

1.模块化设计,较好的扩展性

2.高可靠性

3.支持热部署不停机更新配置文件,升级版本,更换日志文件

4.低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

5.event-driven,aio,mmap,sendfile

基本功能

1.静态资源的web服务器

2.http协议反向代理服务器

3.pop3/imap4协议反向代理服务器

4.FastCGI(LNMP),uWSGI(python)等协议

5.模块化(非DSO‘动态模块’),如zip,SSL模块

nginx架构

在这里插入图片描述

在这里插入图片描述

nginx的程序架构


web服务相关的功能

虚拟主机(server)

支持 keep-alive 和管道连接( 共享TCP连接发起并发的HTTP请求)

访问日志(支持基于日志缓冲提高其性能)

url rewrite

路径别名

基于IP及用户的访问控制

支持速率限制及并发数限制

重新配置和在线升级而无须中断客户的工作进程

Memcached 的 GET 接口

nginx的程序架构

master/worker结构

不需要线程

  1. 一个master进程:

负责加载和分析配置文件、管理worker进程、平滑升级

  1. 一个或多个worker进程(与cpu内核相关)

处理并响应用户请求

  1. 缓存相关的进程:

cache loader:载入缓存对象

cache manager:管理缓存对象

nginx模块


nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载

在http://nginx.org/en/dosc/下面查看

在这里插入图片描述

模块分类

  1. 核心模块:core module

  2. 标准模块:

① HTTP 模块: ngx_http_*

HTTP Core modules 默认功能

HTTP Optional modules 需编译时指定

② Mail 模块 ngx_mail_*

③ Stream 模块 ngx_stream_*

  1. 第三方模块

主要模块

![在这里插入图片描述](https://img-blog.csdnimg.cn/2021021911
073851.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY5NzI5Mw==,size_16,color_FFFFFF,t_70)

  1. 核心模块:是 Nginx 服务器正常运行 必不可少 的模块,提供 错误日志记录 、配置文件解析 、 事件驱动机制 、 进程管理 等核心功能

  2. 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等

  3. 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全

协议 SSL 支持等

  1. 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、IMAP 协议和 SMTP协议的支持

  2. 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如:Json 支持、 Lua 支持等

nginx的功功能


有状态:https

无状态:http静态

  1. 静态的web资源服务器

html,图片,js,css,txt等静态资源

  1. 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求

  2. http/https协议的反向代理

  3. imap4/pop3协议的反向代理

  4. tcp/udp协议的请求转发(反向代理)

虚拟主机(server)

支持 keep-alive 和管道连接(利用一个连接做多次请求)

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于IP及用户的访问控制

支持速率限制及并发数限制

重新配置和在线升级而无须中断客户的工作进程

主进程

读取Nginx 配置文件并验证其有效性和正确性

建立、绑定和关闭socket连接

按照配置生成、管理和结束工作进程

接受外界指令,比如重启、升级及退出服务器等指令

不中断服务,实现平滑升级,重启服务并应用新的配置

开启日志文件,获取文件描述符

不中断服务,实现平滑升级,升级失败进行回滚处理

编译和处理perl脚本

工作进程

接受处理客户的请求

将请求以此送入各个功能模块进行处理 IO调用,获取响应数据

与后端服务器通信,接收后端服务器的处理结果

缓存数据,访问缓存索引,查询和调用缓存数据

发送请求结果,响应客户的请求

接收主程序指令,比如重启、升级和退出等

nginx的安装

===========================================================================

官方yum源:

http://nginx.org/packages/centos/7/x86_64/

官方的nginx的epel源

http://nginx.org/en/linux_packages.html#RHEL-CentOS

首先全装 yum-utils

在这里插入图片描述

在这里插入图片描述

Fedora-EPEL源:

https://mirrors.aliyun.com/epel/7/x86_64/

下载包

http://nginx.org

编译安装

建议编译安装中的参数尽量与之前nginx的参数一样-V

yum install gcc pcre-devel openssl-devel zlib-devel -y

useradd -r -s /sbin/nologin nginx -u 2000

tar xvf nginx.tar.gz

mkdir -p /apps/nginx

chown nginx.nginx /apps/nginx -R

cd nginx/

./configure --prefix=/apps/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 \

–with-http_stub_status_module --with-threads --with-file-aio

make && make install

示例

wget 网络

tar xvf 包

useradd -r -s /sbin/nologin nginx -u 2000

chown nginx.nginx /data /apps/nginx -R

./configure --prefix=/apps/nginx \

–user=nginx \

–group=nginx \

–with-http_ssl_module \

–with-http_v2_module \

–with-http_realip_module \

–with-http_stub_status_module \

–with-http_gzip_static_module \

–with-pcre \

–with-stream \

–with-stream_ssl_module \

–with-stream_realip_module

make && make install

在这里插入图片描述

可以创建软连接

创建一个软连接

ln -s /apps/nginx/sbin/nginx /usr/sbin/

这样就可以用nginx 启动服务

nginx

也可以复制服务脚本

将另一台yum安装的service文件拷贝过来

scp /usr/lib/systemd/system/nginx.service 192.168.245.72:/usr/lib/systemd/system/nginx.service

修改里面的配置

[Unit]

Description=The nginx HTTP and reverse proxy server

After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/run/nginx.pid

ExecStartPre=/usr/bin/rm -f /run/nginx.pid

ExecStartPre=/apps/nginx/sbin/nginx -t

ExecStart=/apps/nginx/sbin/nginx

ExecReload=/bin/kill -s HUP $MAINPID

KillSignal=SIGQUIT

TimeoutStopSec=5

KillMode=process

PrivateTmp=true

[Install]

WantedBy=multi-user.target

systemctl daemon-reload

注意:配置文件

在这里插入图片描述

启动服务systemctl start nginx

一般会直接启用主进程 nginx 来启动服务

在这里插入图片描述

重点------- nginx命令

====================================================================================

ls /apps/nginx/

html是测试页,sbin是主程序

ls /apps/nginx/sbin/

nginx 只有一个程序文件

ls /apps/nginx/html/

50x.html index.html 测试网页

nginx:默认为启动nginx

nginx 命令选项:常用

-h 查看帮助选项

-V (大)查看版本和 配置选项(可以用来参考编译安装)

-v 查看版本信息

-t 测试nginx语法错误

-T 详细设置

-c filename 指定配置文件(default: /etc/nginx/nginx.conf)

-s signal 发送信号给master进程,signal:stop, quit, reopen, reload

示例: nginx -s stop 停止nginx

nginx -s reload 加载配置文件

-g directives 在命令行中指明全局指令

常用:这种方式,与systemctl冲突

nginx

nginx -h

nginx -t 修改完配置文件后检查语法

nginx -v

nginx -V

nginx -s stop

nginx -s reload

五. nginx配置

=============================================================================

主配置文件:nginx.conf

子配置文件 include conf.d/*.conf

fastcgi, uwsgi,scgi等协议相关的配置文件

mime.types:支持的mime类型

主配置文件的配置指令

directive value [value2 …];

注意

(1) 指令必须以分号结尾

(2) 支持使用配置变量

内建变量:由Nginx模块引入,可直接引用

自定义变量:由用户使用set命令定义

set variable_name value;

引用变量:$variable_name

nginx配置文件

在这里插入图片描述

配置文档

http://nginx.org/en/docs/

在这里插入图片描述

主配置文件结构:四部

main block:主配置段,即全局配置段,对http,mail都有效

event {

} 事件驱动相关的配置

http {

} http/https 协议相关配置段

mail {

} mail 协议相关配置段

stream {

} stream 服务器相关配置段

http协议相关的配置结构

http {

… 各server的公共配置

server { 每个server用于定义一个虚拟主机

}

server {

server_name 虚拟主机名

root 主目录

alias 路径别名

location [OPERATOR] URL { 指定URL的特性

if CONDITION {

}

}

}

}

全局配置


Main 全局配置段常见的配置指令分类

帮助文档

http://nginx.org/en/docs/

http://tengine.taobao.org/nginx_docs/cn/docs/

正常运行必备的配置

  1. user

指定worker进程的运行身份,如组不指定,默认和用户名同名

Syntax: user user [group];

Default: user nobody nobody;

Context: main

注意这里:如果有多个不同的nginx服务器

要让其PID,服务名都一样

useradd -r -s /sbin/nologin nginx -u 2000

  1. pid /PATH/TO/PID_FILE;

指定存储nginx主进程PID的文件路径

  1. include file | mask; 指明所需的配置文件或者目录

指明包含进来的其它配置文件片断

也可以自定义配置文件夹 nginx/conf/conf.d/*.conf

给主配置文件里面加一个 indlude conf.d/*.conf

  1. load_module file ;

一般直接用include就可以指定

模块加载配置文件: /usr/share/nginx/modules/*.conf

指明要装载的动态模块路径:/usr/lib64/nginx/modules

在这里插入图片描述

性能优化相关的配置(全局)


  1. worker_processes number | auto;

worker进程的数量;与cpu个数相匹配

auto,自动的识别本机的cpu个数

  1. worker_cpu_affinity cpumask …; 也就是绑定cpu和worker进程

worker_cpu_affinity auto [cpumask] 提高缓存命中率

CPU绑定

几个cpu写几个0

CPU MASK: 00000001:0号CPU

00000010:1号CPU

10000000:7号CPU

例如有4个cpu

worker_processes=4

worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity 0101 1010;

在这里插入图片描述

  1. worker_priority number;

指定worker进程的nice值,设定worker进程优先级:[-20,19]

默认为0

ps axo pid,cmd,nice |grep nginx

在这里插入图片描述

  1. worker_rlimit_nofile number;

所有worker进程能打开的文件数量上限,最好与ulimit -n 的值保持一致,如65535

用测试ab -n1000 -c100 http://192.168.245.72/index.html

事件驱动相关的配置(events中)


在events中设置

events {

}

  1. worker_connections #;

与(worker数量)及ulimit -n值相对应

每个worker进程所能够打开的最大并发连接数,如10240

总最大并发数:不能超过ulimit -n的值

worker_processes * worker_connections

作为负载均衡时只能设置为最大连接数/CUP

  1. use method; 指定使用的io模型

指明并发连接请求的处理方法,默认自动选择最优方法

示例:use epoll; nginx默认为epoll

  1. accept_mutex on | off;

处理新的连接请求的方法;on由各个worker轮流处理新请求Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能,默认值为off,可优化为on

  1. multi_accept on|off;

此指令默认为off,即默认为一个worker进程只能一次接受一个新的网络连接

on表示每个woker进程可以同时接受所有新的网络连接(并发性强)

调试和定位问题(全局)


1、daemon on|off;

是否以守护进程方式运行,默认是on,守护进程方式

off 用于调试或docker环境(前台运行)

2、master_process on|off;

是否以master/worker模型运行nginx,默认为on,

off 将不启动worker 测试环境下可以

3、error_log file [level] ;

错误日志文件及其级别;出于调试需要,可设定为debug;但debug

仅在编译时使用了“--with-debug”选项时才有效

/path/logfile: 记录到文件中

stderr: 发送到标准错误

syslog:server-address[,parameter=values] 发送到syslog

memory:size 内存

level:debug|info|notice|warn|error|crit|alter|emerg 日志级别

可以用ab在另一台机子上测试nginx

配置实例


user nginx;

worker_processes auto;

pid /run/nginx.pid;

events {

use epoll;

worker_connections 20480;

multi_accept on;

accept_mutex on;

}

stream {

include sites-enabled/*.stream;

}

http {

include mime.types;

default_type application/octet-stream;

include vhosts/*.conf;

log_format main ‘ r e m o t e a d d r ∣ remote_addr| remoteaddrremote_user|[ t i m e l o c a l ] ∣ " time_local]|" timelocal]∣"request"|’

s t a t u s ∣ status| statusbody_bytes_sent| h t t p h o s t ∣ " http_host|" httphost∣"http_referer"|’

‘" h t t p u s e r a g e n t " ∣ http_user_agent"| httpuseragent"∣http_x_forwarded_for|$upstream_cache_status|’

‘" u p s t r e a m h t t p c o n t e n t t y p e " ∣ upstream_http_content_type"| upstreamhttpcontenttype"∣request_time| u p s t r e a m r e s p o n s e t i m e ∣ upstream_response_time| upstreamresponsetimebytes_sent|$request_length|’

‘" u p s t r e a m a d d r " ∣ upstream_addr"| upstreamaddr"∣uuid|$span_id’;

access_log /data/iuap/logs/nginx/access.log main;

error_log /data/iuap/logs/nginx/error.log notice;

sendfile on;

keepalive_timeout 65;

charset utf-8;

server_tokens off;

server_names_hash_bucket_size 128;

client_header_buffer_size 32k;

large_client_header_buffers 4 32k;

client_max_body_size 800m;

tcp_nopush on;

underscores_in_headers on;

client_body_buffer_size 512k;

proxy_headers_hash_max_size 51200;

proxy_headers_hash_bucket_size 6400;

proxy_connect_timeout 5;

proxy_read_timeout 60;

proxy_send_timeout 5;

proxy_buffer_size 16k;

proxy_buffers 4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

proxy_temp_path /data/iuap/middleware/nginx/proxy_temp;

proxy_cache_path /data/iuap/middleware/nginx/proxy_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m;

proxy_cache_path /data/iuap/middleware/nginx/proxy_cache_image levels=1:2 keys_zone=content_image:20m inactive=1d max_size=100m;

proxy_cache_bypass $http_secret_header;

proxy_ignore_client_abort on;

vhost_traffic_status_zone;

vhost_traffic_status_filter_by_host on;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.0;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript application/javascript text/css;

gzip_vary on;

lua_package_path “/data/iuap/middleware/nginx/lualib/?.lua;;”;

init_by_lua ’

require “resty.core”

uuid4 = require “uuid4”

';

include conf.d/*.conf;

include sites-enabled/*.conf;

server {

listen 4040 default;

access_log off;

location /status {

vhost_traffic_status_display;

vhost_traffic_status_display_format html;

allow 127.0.0.1;

allow 172.20.46.224;

allow 172.20.46.78;

deny all;

set_by_lua $uuid ’

if ngx.var.http_X_traceId == nil then

return string.sub(ngx.var.request_id,17,-1)

else

return ngx.var.http_X_traceId

end

';

set_by_lua $span_id ’

if ngx.var.http_X_spanId == nil then

return ngx.var.uuid

else

return ngx.var.http_X_spanId

end

';

}

}
}

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值