背景

前面刚介绍了nginx是什么?nginx可以做什么?那些都是停了在书面表达上面,下面我们就从nginx的安装开始,一步一步的去体会nginx的强大功能吧....

安装

nginx的安装的方式有很多种,常见的有:1)使用操作系统的官方镜像源通过apt/yum的命令安装;2)通过在nginx的官网下载源码包编译安装;3)添加nginx的官网镜像源,然后使用apt/yum安装。

由于我们是做实验,考虑到简单方便和相对正规,我们就通过添加nginx的官方源之后,在使用apt/yum的安装方式吧。关于编译安装后续我们在单独的说明一下。

1.  添加nginx的源

前面说过作者的公司是国产系统厂商,这里我们还是使用国产服务器操作系统(debian的内核);作为一名运维人员,无论在安装什么软件时,我们首先想到的就是去查找软件的官方文档或说明。

打开nginx官网(nginx.org),我们在选择版本的时候,一般选择稳定发布版本(stable  version)。

点击版本号,进入到该版本的相关内容中,滑到最底部,找到linux的稳定包,并点击进入。

进入之后就是各个发行的linux系统的安装说明,这里我们找到Debian

1.1    安装相关依赖

xhz@xhz-uos:~$
xhz@xhz-uos:~$ sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

1.2     获取秘钥

导入官方 nginx 签名密钥,以便 apt 可以验证包的真实性

xhz@xhz-uos:~$
xhz@xhz-uos:~$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

1.3    验证秘钥

xhz@xhz-uos:~$
xhz@xhz-uos:~$ gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

1.4    校验输出内容是否完整一直

xhz@xhz-uos:~$
xhz@xhz-uos:~$pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com>

1.5  要使用稳定的nginx包,添加如下源

xhz@xhz-uos:~$
xhz@xhz-uos:~$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \| sudo tee /etc/apt/sources.list.d/nginx.list

或者

1.6    添加主线版本的包

xhz@xhz-uos:~$
xhz@xhz-uos:~$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \| sudo tee /etc/apt/sources.list.d/nginx.list

1.7  设置固定的软件库

xhz@xhz-uos:~$
xhz@xhz-uos:~$ echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \| sudo tee /etc/apt/preferences.d/99nginx

1.8   通过命令进行安装

xhz@xhz-uos:~$
xhz@xhz-uos:~$ sudo apt update
xhz@xhz-uos:~$ sudo apt install nginx

1.9  查看软件包安装是否正常

root@xhz-uos:/home/xhz# dpkg -l |grep nginx
ii  nginx                                      1.22.0-1~jammy                          amd64        high performance web server
root@xhz-uos:/home/xhz#

至此nginx安装完毕.....

配置介绍

软件包安装完之后我们先大致的看下软件包中包含那些文件,分别在什么目录下,做到基本的心中有数。

root@xhz-uos:/home/xhz# dpkg  -L  nginx
/.
/etc
/etc/default
/etc/default/nginx
/etc/default/nginx-debug
/etc/init.d
/etc/init.d/nginx
/etc/init.d/nginx-debug
/etc/logrotate.d
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/nginx-debug.service
/lib/systemd/system/nginx.service
/usr
/usr/lib
/usr/lib/nginx
/usr/lib/nginx/modules
/usr/sbin
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share
/usr/share/doc
/usr/share/doc/nginx
/usr/share/doc/nginx/CHANGES.ru.gz
/usr/share/doc/nginx/README
/usr/share/doc/nginx/changelog.Debian.gz
/usr/share/doc/nginx/changelog.gz
/usr/share/doc/nginx/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/nginx
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var
/var/cache
/var/cache/nginx
/var/log
/var/log/nginx
/etc/nginx/modules

1.   基础配置文件

nginx的主配置文件(/etc/nginx/nginx.conf)是分结构的。

...                  # 全局块events {           # events块...
}http {                         # http块...                          # http全局块server {                   # server块...                    # server全局块location [PATTERN] {     # location块...}location [PATTERN] {...}}server { ...      }...              # http全局块
}

全局块: 配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组、nginx 进程 pid 存放路径、日志存放路径、配置文件引入、允许生成 worker process 数等;

events块: 配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数、选取哪种事件驱动模型处理连接请求、是否允许同时接受多个网路连接、开启多个网络连接序列化等;

http块:可以嵌套多个 server、配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置。如文件引入、mime-type 定义、日志自定义、是否使用 sendfile 传输文件、连接超时时间、单连接请求数等;

server块:配置虚拟主机的相关参数,一个 http 中可以有多个 server

location块:配置请求的路由,以及各种页面的处理情况。一个server中可以有多个location。

Nginx 配置的注释是以 # 开头,并且每条语句都要以 ; 结束,除了语句块 {}

2.   默认安装的配置文件

nginx的配置内容非常丰富,目前我们先通过默认配置的配置文件做简要说明,后续在详细说明。

root@xhz-uos:/etc/nginx# cat nginx.conf ## nginx进程启动的默认用户名和组
user  nginx;##  配置work进程数,auto表示根据cpu的数量来定
worker_processes  auto;## 指定错误日志的的文件及记录日志的级别
error_log  /var/log/nginx/error.log notice;##  指定nginx的进程文件
pid        /var/run/nginx.pid;events {## 配置一个work进程允许的最多连接数worker_connections  1024;
}http {##  文件扩展名与文件类型映射表include       /etc/nginx/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日志的保存路径,并指定以main的格式进行保存。access_log  /var/log/nginx/access.log  main;##  是否开启高效文件传输模式sendfile        on;#tcp_nopush     on;##  长连接超时时间keepalive_timeout  65;#gzip  on;##  引入该目录下.conf的配置文件include /etc/nginx/conf.d/*.conf;
}

针对上述的默认配置参数我们做了简单的说明,有两点需要额外说明一下:

2.1  error_log  /var/log/nginx/error.log notice中的notice

nginx的日志级别有:debug|info|notice|warn|error|crit|alert|emerg

日志级别越高记录的信息越少,生产场景一般是 warn | error | crit 这三个级别之一

2.3   服务日志保存格式说明

 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';参数  说明  示例
$remote_addr   客户端地址
$remote_user   客户端用户名称 --
$time_local    访问时间和时区
$request   请求的URI和HTTP协议
$http_host 请求地址,即浏览器中你输入的地址(IP或域名)
$status    HTTP请求状态
$upstream_status   upstream状态
$body_bytes_sent   发送给客户端文件内容大小
$http_referer  url跳转来源
$http_user_agent   用户终端浏览器等信息  ; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol  SSL协议版本
$ssl_cipher    交换数据中的算法    RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址
$request_time  整个请求的总时间
$upstream_response_time    请求过程中,upstream响应时间 

3.  配置参数总体概述

正是由于nginx有丰富的配置参数,才创造了nginx的强大功能,下面是nginx配置参数的整体概述,在此记录一下,方便查询。关于nginx的配置参数说明认准nginx官网。

 #配置允许nginx服务器运行的用户和用户组,nobody表示所有用户都可以运行。
user nginx;#配置nginx运行最多可以产生的worker process数,也可以设置为”auto”,由nginx自动检测。
worker_processes auto;#配置日志的存放位置,在全局块、http块、server块中都可以配置日志,根据不同的配置位置其作用域也不相同。
#语法: error_log /path/file level;
#默认: error_log / log/error.log error;
#当path/file 的值为 /dev/null时,这样就不会输出任何日志了,这也是关闭error日志的唯一手段;
#leve的取值范围是debug、info、notice、warn、error、crit、alert、emerg从左至右级别依次增大。
#当level的级别为error时,error、crit、alert、emerg级别的日志就都会输出。大于等于该级别会输出,小于该级别的不会输出。
#如果设定的日志级别是debug,则会输出所有的日志,这一数据量会很大,需要预先确保/path/file所在的磁盘有足够的磁盘空间。级别设定到debug,必须在configure时加入 --with-debug配置项。
error_log /var/log/nginx/error.log;#pid文件(master进程ID的pid文件存放路径)的路径
pid /run/nginx.pid;#引入其它的配置文件。也可以配置在其它块中,区别在于作用域。
include /usr/share/nginx/modules/*.conf;events {#配置处理网络消息的事件驱动模型,可选项有select、poll、kqueue、epoll、rtsig、/dev/poll和eventport。默认为epoll。use epoll;#配置每个worker process同时开启的最大连接数。worker_connections 1024;#配置网络连接的序列化,对nginx进程接收到的连接进行序列化,防止多个进程对连接的争抢(解决惊群问题)。accept_mutex on;#配置每个worker process是否同时接收多个新到达的网络连接,此配置默认为off状态,即每个worker process一次只能接收一个新到达的网络连接multi_accept on;
}http {#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。sendfile            on;#此配置与sendfile配置项相关联,表示worker process每次调用sendfile传输的数据量最大不超过此值,设置为0表示无限制。sendfile_max_chunk 128k;#定义mime-type,include包含了一个其它的配置文件,里面定义了支持的mime类型及后缀名。#default_type配置用于处理前端请求的mime类型,必须是mime.types中定义的mime-type。include             /etc/nginx/mime.types;default_type        application/octet-stream;#用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;access_log  /var/log/nginx/access.log  main;##日志格式设置。#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;#$remote_user:用来记录客户端用户名称;#$time_local: 用来记录访问时间与时区;#$request: 用来记录请求的url与http协议;#$status: 用来记录请求状态;成功是200,#$body_bytes_sent :记录发送给客户端文件主体内容大小;#$http_referer:用来记录从那个页面链接访问过来的;#$http_user_agent:记录客户浏览器的相关信息;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';#keepalive超时时间。keepalive_timeout   65;#激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量tcp_nopush          on;#激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能tcp_nodelay         on;#max指定缓存的最大数量,如果超出,则最近最少使用(LRU)的缓存将被清除;inactive指定多长时间没有访问则清除此缓存。open_file_cache max=65535 inactive=20s;#每30秒检查一次缓存文件的元信息,如果不是最新的则更新。open_file_cache_valid 30s;#与inactive项相关联,表示inactive时间内的最少访问次数,如果在inactive时间内没有达到此访问次数,则清除此缓存信息。open_file_cache_min_uses 1;#nginx服务器响应超时时间,即nginx与client建立连接后,单次会话中nginx等待client响应超过此值,nginx将自动关闭连接。send_timeout 10s;#影响散列表的冲突率。此值越大,消耗内存则越多,散列key冲突率就越低,检索速度就更快;值越小,消耗内存就越少,冲突率相对就会高一些。types_hash_max_size 2048;#用于设置nginx服务器允许的client request headers buffer size。可根据os分页大小来设置,分页大小可使用getconf PAGESIZE获取。client_header_buffer_size 4k;#启用gzip功能,对响应数据进行在线实时压缩,减少数据传输量。gzip on;#nginx在响应此类客户端请求时,不使用gzip功能缓存应用数据,msie6表示对IE6浏览器的数据不进行gzip压缩。gzip_disable “msie6”;#使用gzip压缩功能的最小数据长度,低于此大小的数据不会进行gzip压缩。对大数据压缩效果比较明显,但小数据压缩可能得不偿失。gzip_min_length 1024;#设置压缩等级,取值范围为1~9,级别1表示压缩程度最低,效率最高,耗时最少;级别9表示压缩程度最高,效率最低,耗时最多。gzip_comp_level 1;#设置在使用Gzip功能时是否发送带有“Vary:Accept-Encoding”头域的响应头部,该头域的主要功能是告诉接收方发送的数据经过了压缩处理,开启后端效果是在响应头部Accept-Encoding: gzip,对于本身不支持Gzip的压缩的客户端浏览器是有用的。gzip_vary on;#该指令用于设置Gzip压缩文件使用存储空间的大小,语法gzip_buffers number size。其中number=指定Nginx服务器需要向系统申请存储空间的个数;size=指定每个缓存空间的大小。#根据配置项,Nginx服务器在对响应输出数据进行Gzip压缩时需向系统申请number*size大小的空间用于存储压缩数据。通常size为os内存页的大小,可用getconf PAGESIZE来获取。gzip_buffers 32 4k;#开启时,如果客户端浏览器不支持Gzip处理,Nginx服务器将返回解压后的数据。如果客户端浏览器支持Gzip处理,Nginx服务器忽略该指令设置,仍然返回压缩数据。gunzip_static on;#设置nginx服务器只对指定的mime-types开启gzip压缩功能。gzip_types text/plain text/css text/javascript;#引入其它的配置文件。也可以配置在其它块中,区别在于作用域。include /etc/nginx/conf.d/*.conf;#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大upstream name {server 127.0.0.1:8001 weight=5;server 127.0.0.1:8002 weight=5;}server {#此server块监听的端口号:80listen       80 default_server;listen       [::]:80 default_server;#此server块对外提供的虚拟主机名称,可以理解为域名(需要设置好dns后才能够直接访问)。此值可以有1个或多个,由空格分隔,默认第1个为主要名称。也可以使用通配符,正则表达式等方式。server_name  _;#等同于apache的document root,指明此虚拟主机的请求根目录,接收到请求后,就会到此根目录寻找相应资源。root         /usr/share/nginx/html;#默认的主页名称。index index.html index.htm index.php;#启用https方式。ssl on;#设置用于发送数据的缓冲区大小。ssl_buffer_size 16k;#配置证书crt(pem)保存路径。ssl_certificate /etc/skey/a.crt;#配置证书key保存路径。ssl_certificate_key /etc/skey/a.key;#配置加密session重用。ssl_session_cache shared:SSL:1m;#session超时时间。ssl_session_timeout 5m;#指定可用的密码算法,必须是openssl库中指定的方式。ssl_ciphers HIGH:!aNULL:!MD5;#在使用sslv3或tls协议时,指定服务器密码优先于客户端密码。ssl_prefer_server_ciphers on;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;##location 语法: location [=|~|~*|^~] /uri/ { ... }#注意:location时有顺序的,当一个请求有可能匹配多个location时,实际上这个请求会被第一个location处理。location / {#alias为别名配置,用于访问文件系统,在匹配到URL后,将URL中 匹配到的字段替换成alias 后边的内容。alias /usr/local/;#根路径配置,用于访问文件系统,在匹配到URI后,指向root配置的路径,并把请求路径附加到其后。root /usr/local/;#代理配置,用于代理请求,匹配到URI后,转发请求到proxy_pass配置的URL。proxy_pass http://127.0.0.1:8003/;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}}

nginx安装及配置说明(二)相关推荐

  1. linux下nginx安装与配置说明

    Nginx运行原理 一个master配置文件中可以设置多个 worker_processes 可以使用nginx -s reload 热部署,利于nginx做热部署操作 对于每个 worker_pro ...

  2. Nginx运维之二 简单安装和环境搭建

    Nginx运维之二 简单安装和环境配置 安装环境 gcc 安装 PCRE pcre-devel 安装 zlib 安装 OpenSSL 安装 下载安装 配置安装 编译安装 配置编辑(案例) 启动与停止 ...

  3. 教程 | 用安卓手机搭建 web 服务器(二)—— Nginx 安装配置

    上一步完成了必要的软件安装,接下来需要在 Linux 系统上安装 nginx. Nginx("engine x")是一款是由俄罗斯的程序设计师 Igor Sysoev 所开发高性能 ...

  4. Nginx——安装与虚拟主机配置(域名非80端口问题)

    一.引言 因为甲方提出问题:一个服务器与IP,两个域名a.b分别对应两个要部署的网站,这个一般是一个域名a对应一个主机服务器ip的默认80端口,另外的网站只能用其他端口(如b:8080对应主机ip:8 ...

  5. Nginx配置图片服务器(Nginx极简配置说明)

    一.概述 同学们大家好,今天给大家带来Nginx的一篇实践配置总结,主要是Nginx做静态图片服务器的详情配置说明,还包括做反向代理.动静分离.负载均衡的极简配置. 二.Nginx安装 Nginx下载 ...

  6. Nginx安装和配置规范

    一.环境说明 序号 操作系统(版本号) 基础软件(版本号) 001 CentOS/RedHat/Oracle Linux 6/7 x86_64 nginx 1.8.0 Nginx服务器实现如下场景和需 ...

  7. nginx安装路径,查找配置文件以及如何配置

    比较小白的问题,就是安装完nginx,想看配置和安装路径的时候,总是是要花一些时间才能找到,所以就总结一下. 一.nginx的安装路径 1.ps -ef | grep nginx 显示如下: 先解释一 ...

  8. Nginx安装、配置及使用总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. Nginx的安装.配置及使用总结: Nginx是一个高性能的HTTP及反向代理服务器,也是IMAP/POP3/SMTP代理服务器.在高并发情况下, ...

  9. Centos 6.0/ Nginx 安装与配置

    系统:Centos 6.0 下载nginx(nginx-1.2.4.tar.g)   http://nginx.org/ 下载pcre(pcre-8.31.tar.gz)    http://pcre ...

最新文章

  1. YII2中分页组件的使用
  2. SAP C4C OData服务的filter,客户端分页和排序的使用方式
  3. (七)Maven使用的最佳实践
  4. PrincetonAlgorithm I - Assignment2 Deques and Randomized Queues
  5. Python将txt文件变为excel文件
  6. 【有返回值的回溯法】剑指offer——面试题66:矩阵中的路径(回溯法)
  7. ISCSI LINUX(RHEL)的搭建与配置
  8. mysql1232_Mysql执行流程
  9. 简约资源教程分享网模板,emlog模板
  10. 小动物立体定位架的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  11. Python爬取京东商品评论和图片下载
  12. -XX:MaxDirectMemorySize直接内存无效问题
  13. 推特开发者账号 获取推文的视频链接
  14. 为什么mac电脑识别不出来u盘?macbook识别不了u盘的解决办法
  15. 注册表编辑器无法在当前所选的项及其部分子项上设置安全性
  16. 计算机组成原理实验logisim(三)之偶校验编码与检错
  17. 模拟房间冲击响应(Room Impulse Response,RIR),AI去混响
  18. htpasswd -cb_安装程序集组件期间发生错误-98cb24ad-52fb-db5f-a01f-c8b3b9a1e18e
  19. 电脑风扇控制软件-全网最全教程+下载链接
  20. LeetCode刷题day50

热门文章

  1. 如何使用迅捷画流程图?
  2. iZotope Ozone 8 Advanced for Mac(臭氧8破解版)高级版永久激活方法
  3. 混合储能系统容量优化MATLAB程序基于粒子群算法
  4. 2022最新版Dubbo面试题
  5. JAVA拓展新的数据库_JavaEE 之 数据库技术 MySQL 拓展应用
  6. linux下ping命令一直ping
  7. 计算机与智能化专业课程,计算机与人工智能专业方向课程大纲介绍-Artificial Intelligence 人工智能(原创)...
  8. 【linux】循序渐进学运维-基础篇-常用ssh管理工具
  9. 惠普服务器性能怎么样查,惠普服务器怎么样
  10. DaVinci Resolve Studio 18 mac中文版 (达芬奇剪辑软件)