nginx
由内核和模块组成。其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
nginx的模块从结构上分为核心模块、基础模块和第三方模块
用户根据自己的需要开发的模块都属于第三方模块。正是有了如此多模块的支撑,nginx的功能才会如此强大
nginx模块从功能上分为三类,分别是:
nginx模块分为:核心模块、事件模块、标准Http模块、可选Http模块、邮件模块、第三方模块和补丁等
nginx
的模块直接被编译进nginx
,因此属于静态编译方式。
启动nginx
后,nginx
的模块被自动加载,与Apache
不一样,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。
在解析配置文件时,nginx
的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。
nginx
的进程架构:
启动nginx
时,会启动一个Master
进程,这个进程不处理任何客户端的请求,主要用来产生worker
线程,一个worker
线程用来处理n个request
。
下图展示了nginx
模块一次常规的HTTP请求和响应的过程
下图展示了基本的WEB服务请求步骤
创建系统用户nginx
[root@localhost ~]# useradd -r -M -s /sbin/nologin nginx
安装依赖环境
[root@localhost ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ [root@localhost ~]# yum -y groups mark install 'Development Tools' 上次元数据过期检查:2:59:11 前,执行于 2021年10月25日 星期一 01时04分32秒。 依赖关系解决。 ============================================================= 软件包 架构 版本 仓库 大小 ============================================================= 安装组: Development Tools 事务概要 ============================================================= 完毕!
创建日志存放目录
[root@localhost ~]# mkdir -p /var/log/nginx [root@localhost ~]# chown -R nginx.nginx /var/log/nginx
下载nginx
[root@localhost ~]# cd /usr/src/ [root@localhost src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz --2021-10-25 04:06:16-- http://nginx.org/download/nginx-1.12.0.tar.gz 正在解析主机 nginx.org (nginx.org)...
编译安装
[root@localhost src]# ls debug kernels nginx-1.12.0.tar.gz [root@localhost src]# tar xf nginx-1.12.0.tar.gz [root@localhost src]# cd nginx-1.12.0 [root@localhost nginx-1.12.0]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-debug \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log [root@localhost nginx-1.12.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install
服务控制方式,使用nginx命令
配置环境变量
[root@localhost ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh [root@localhost ~]# . /etc/profile.d/nginx.sh
服务控制方式,使用nginx命令
-t 检查配置文件语法
[root@localhost ~]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
-v 输出nginx的版本
[root@localhost ~]# nginx -v nginx version: nginx/1.20.1
-c 指定配置文件的路径
[root@localhost ~]# nginx -s stop ; nginx -c /opt/nginx.conf ##直接停掉然后启动 [root@localhost ~]# ps -ef|grep nginx root 99290 1 0 03:32 ? 00:00:00 nginx: master process nginx -c /opt/nginx.conf nginx 99291 99290 0 03:32 ? 00:00:00 nginx: worker process nginx 99292 99290 0 03:32 ? 00:00:00 nginx: worker process root 101138 1653 0 03:33 pts/0 00:00:00 grep --color=auto nginx
-s 发送服务控制信号,可选值有{stop|quit|reopen|reload}
[root@localhost ~]# nginx -s quit [root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:*
主配置文件:/usr/local/nginx/conf
nginx常见的配置文件及其作用
配置文件 | 作用 |
---|---|
nginx.conf | nginx的基本配置文件 |
mime.types | MIME类型关联的扩展文件 |
fastcgi.conf | 与fastcgi相关的配置 |
proxy.conf | 与proxy相关的配置 |
sites.conf | 配置nginx提供的网站,包括虚拟主机 |
nginx.conf的内容分为以下几段:
Nginx配置文件示例
[root@localhost ~]# vim /usr/local/nginx/conf # 全局块 user www-data; ##用户 worker_processes 2; ## 默认1,一般建议设成CPU核数1-2倍 error_log logs/error.log; ## 错误日志路径 pid logs/nginx.pid; ## 进程id # Events块 events { # 使用epoll的I/O 模型处理轮询事件。 # 可以不设置,nginx会根据操作系统选择合适的模型 use epoll; # 工作进程的最大连接数量, 默认1024个 worker_connections 2048; # http层面的keep-alive超时时间 keepalive_timeout 60; # 客户端请求头部的缓冲区大小 client_header_buffer_size 2k; } # http块 http { include mime.types; # 导入文件扩展名与文件类型映射表 default_type application/octet-stream; # 默认文件类型 # 日志格式及access日志路径 log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; # 允许sendfile方式传输文件,默认为off。 sendfile on; tcp_nopush on; # sendfile开启时才开启。 # http server块 # 简单反向代理 server { listen 80; server_name domain2.com www.domain2.com; access_log logs/domain2.access.log main; # 转发动态请求到web应用服务器 location / { proxy_pass http://127.0.0.1:8000; deny 192.24.40.8; # 拒绝的ip allow 192.24.40.6; # 允许的ip } # 错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # 负载均衡 upstream backend_server { server 192.168.0.1:8000 weight=5; # weight越高,权重越大 server 192.168.0.2:8000 weight=1; server 192.168.0.3:8000; server 192.168.0.4:8001 backup; # 热备 } server { listen 80; server_name big.server.com; access_log logs/big.server.access.log main; charset utf-8; client_max_body_size 10M; # 限制用户上传文件大小,默认1M location / { # 使用proxy_pass转发请求到通过upstream定义的一组应用服务器 proxy_pass http://backend_server; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; } } }
配置指令:要以分号结尾,语法格式如下:
derective value1 [value2 ...];
支持使用变量:
set var_name value
daemon {on|off}; //是否以守护进程方式运行nginx,调试时应设置为off master_process {on|off}; //是否以master/worker模型来运行nginx,调试时可以设置为off error_log 位置 级别; //配置错误日志