Nginx--简介、安装、常用命令和配置文件

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

一、Nginx简介

1、nginx介绍

Nginx (engine x) 是一个高性能的 HTTP反向代理 服务,也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好

在高连接并发的情况下,Nginx是Apache服务器不错的替代品

2、为什么选择nginx

  • 作为web服务器
  • 作为负载均衡服务器
  • 作为邮件代理服务器
  • Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器

3、IO多路复用

3.1、I/O multiplexing(多并发

第一种方法就是最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理。)

第二种方法就是I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流

I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流。发明它的原因,是尽量多的提高服务器的吞吐能力。 在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流

3.2、Nginx使用epoll接收请求的过程

ngnix会有很多连接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。

epoll:

epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了poll 和select绝大部分问题, 比如:

  • epoll 现在是线程安全的
  • epoll 现在不仅告诉你sock组里面数据,还会告诉你具体哪个sock有数据,你不用自己去找了

3.3、异步、非阻塞

 [root@centos ~]# pstree |grep nginx|-+= 81666 root nginx: master process nginx| |--- 82500 nobody nginx: worker process| --- 82501 nobody nginx: worker process

每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理 的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。这就是异步。此时,如果再有request 进来,他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。这就是异步回调

4、Nginx的内部技术架构

  • nginx启动时,会生成两种类型的进程,一个是主进程(Master),一个(windows版本的目前只有一个)或多个工作进程(Worker)。主进程并不处理网络请求,主要负责调度工作进程,也就是图示的三项:加载配置、启动工作进程及非停升级。所以,nginx启动以后,查看操作系统的进程列表,我们就 能看到至少有两个nginx进程。
  • 服务器实际处理网络请求及响应的是工作进程(worker),在类unix系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求
  • 模块化设计。nginx的worker,包括核心和功能性模块,核心模块负责维持一个运行循环(run-loop),执行网络请求处理的不同阶段的模块功能,如网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等。而其代码的模块化设计,也使得我们可以根据需要对功能模块进行适当的选择和修改,编译成具有特定功能的服务器。
  • 事件驱动、异步及非阻塞,可以说是nginx得以获得高并发、高性能的关键因素,同时也得益于对Linux、Solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能的采用,如kqueue、epoll及event ports
  • 代理(proxy)设计,可以说是nginx深入骨髓的设计,无论是对于HTTP,还是对于FastCGI、memcache、Redis等的网络请求或响应,本质上都采用了代理机制。所以,nginx天生就是高性能的代理服务器

二、Nginx的安装(Linux:CentOS7)

1、Nginx版本类型

  • Mainline version: 主线版,即开发版
  • Stable version 最新稳定版,生产环境上建议使用的版本
  • Legacy versions: 遗留的老版本的稳定版

2、YUM安装

2.1、配置yum源地址

官网有给出Nginx稳定版的yum仓库源地址; nginx news

2.2、开始配置并下载nginx

 # cd /etc/yum.repos.d/# vim nginx.repo[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true# yum install -y nginx

2.3、关闭防火墙与selinux

 # getenforce Enforcing# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config# systemctl stop firewalld# systemctl disable firewalld

2.4、启动并设置开机自启

# systemctl start nginx 
# systemctl enable nginx

2.5、在浏览器输入本机IP即可访问到Nginx默认主页

3、源码编译安装

3.1、安装环境以及相关包

 # 安装编译环境、pcre软件包(使nginx支持http rewrite模块)、openssl-devel(使nginx支持ssl)、zlib包yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel

3.2、创建用户nginx

 useradd nginx 

3.3、安装nginx

 [root@centos ~]# wget http://nginx.org/download/nginx-1.16.0.tar.gz[root@centos ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/[root@centos ~]# cd /usr/local/nginx-1.16.0/[root@centos nginx-1.16.0]# ./configure \--prefix=/usr/local/nginx \--group=nginx \--user=nginx \--sbin-path=/usr/local/nginx/sbin/nginx \--conf-path=/etc/nginx/nginx.conf \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--http-client-body-temp-path=/tmp/nginx/client_body \--http-proxy-temp-path=/tmp/nginx/proxy \--http-fastcgi-temp-path=/tmp/nginx/fastcgi \--pid-path=/var/run/nginx.pid \--lock-path=/var/lock/nginx \--with-http_stub_status_module \--with-http_ssl_module \--with-http_gzip_static_module \--with-pcre \--with-http_realip_module \--with-stream[root@centos nginx-1.16.0]# make && make install

3.4、配置与启动nginx命令

 # 尝试启动nginx [root@centos nginx-1.16.0]# /usr/local/nginx/sbin/nginx nginx: [emerg] mkdir() "/tmp/nginx/client_body" failed (2: No such file or directory)# 检查并创建Nginx所需配置目录文件[root@centos nginx-1.16.0]# mkdir -p /tmp/nginx/client_body [root@centos nginx-1.16.0]# mkdir /usr/local/nginx/logs# 启动Nginx服务[root@centos nginx-1.16.0]# /usr/local/nginx/sbin/nginx# 查看nginx服务是否运行[root@centos nginx-1.16.0]# netstat -tunlp | grep 80tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      10390/nginx: master# 配置Ngingx命令至环境变量中,便于执行[root@centos nginx-1.16.0]# echo -e "export PATH=/usr/local/nginx/sbin/:$PATH" >> /etc/profile[root@centos nginx-1.16.0]# source /etc/profile[root@centos nginx-1.16.0]# nginx -t

3.5、Nginx编译参数

 # 查看 nginx 安装的模块[root@centos nginx-1.16.0]# nginx -V# 模块参数具体功能nginx version: nginx/1.16.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips  26 Jan 2017TLS SNI support enabledconfigure arguments: --prefix=/usr/local/nginx       # 指向安装目录--group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf               # 指定配置文件--error-log-path=/var/log/nginx/error.log       # 指定错误日志--http-log-path=/var/log/nginx/access.log       # 指定访问日志--http-client-body-temp-path=/tmp/nginx/client_body     # 设定http客户端请求临时文件路径--http-proxy-temp-path=/tmp/nginx/proxy         # 设定http代理临时文件路径--http-fastcgi-temp-path=/tmp/nginx/fastcgi     # 设定http fastcgi临时文件路径--pid-path=/var/run/nginx.pid                   # 指定pid文件--lock-path=/var/lock/nginx                     # 指定lock文件--with-http_stub_status_module              # 获取nginx自上次启动以来的状态--with-http_ssl_module                      # 启用ssl支持--with-http_gzip_static_module              # 在线实时压缩输出数据流--with-pcre                                 --with-http_realip_module                   # # 允许从请求标头更改客户端的IP地址值,默认为关--with-stream

3.6、配置文件/etc/nginx/nginx.conf

配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的内容如下:

 # ---------------------全局块-------------------# worker_processes  1;        # nginx的工作进程数,auto:基于可用CPU自动确定# --------------------事件模块------------------#events {worker_connections  1024;   # 每个工作进程允许的最大连接数}# --------------------HTTP配置------------------#http {include       mime.types;       # MIME 类型default_type  application/octet-stream; # 设置默认的 MIME 类型sendfile        on;             # 启用高效文件传输模式keepalive_timeout  65;          # 设置长连接的超时时间为 65 秒​server {listen       80;            # 监听端口server_name  localhost;     # 服务器的名称或域名​location / {                # 位置块,定义对根 URL (/) 的请求如何处理root   html;            # 请求的根目录index  index.html index.htm;    # 指定当请求是目录,默认提供的文件名}error_page   500 502 503 504  /50x.html;    # 错误页面location = /50x.html {root   html;    # 这里的绝对位置是/usr/local/nginx/html}}}

nginx.conf的组成:nginx.conf一共由三部分组成,分别为:全局块、events块、http块。在http 块中又包含http全局块、多个server块。每个server块中又包含server全局块以及多个location块。在统一配置块中嵌套的配置块,各个之间不存在次序关系。

3.7、在浏览器访问

三、Nginx常用命令和配置文件

1、常用命令

命令作用
nginx -c /path/nginx.conf以特定目录下的配置文件启动nginx:
nginx -s reload修改配置后重新加载生效
nginx -s reopen重新打开日志文件
nginx -s stop快速停止nginx
nginx -s quit完整有序的停止nginx
nginx -t测试当前配置文件是否正确
nginx -t -c /path/to/nginx.conf测试特定的nginx配置文件是否正确

nginx -s reload 命令加载修改后的配置文件,命令下达后发生如下事件:

  • Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作(因为worker未受到影响)
  • Nginx启动新的worker进程,采用新的配置文件
  • Nginx将新的请求分配新的worker进程
  • Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程
  • 重复上面过程,知道全部旧的worker进程都被关闭掉

2、配置文件

  • /usr/share/nginx/html/:网站主目录
  • /etc/nginx/nginx.conf:主配置文件
  • /etc/nginx/conf.d/default.conf:子配置文件

2.1、Nginx配置文件的组成

yum进行安装的nginx配置文件与源码编译安装的nginx配置文件有所不同,其yum安装的配置文件中的server块单独成了一个文件,而源码编译安装的配置文件则在主配置文件中全有;

/etc/nginx/nginx.conf

 # --------------------基础配置------------------#user  nginx;        # 设置nginx工作进程运行的用户,nginx表示nginx服务以nginx用户权限运行worker_processes  auto;     # nginx的工作进程数,auto:基于可用CPU自动确定​error_log  /var/log/nginx/error.log notice; # 指定错误日志的位置和记录级别pid        /var/run/nginx.pid;      # 设置存放 NGINX 主进程号的文件位置# --------------------事件模块------------------#events {worker_connections  1024;       # 每个工作进程允许的最大连接数}# --------------------HTTP配置------------------#http {include       /etc/nginx/mime.types;    # MIME类型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  /var/log/nginx/access.log  main;    # 访问日志sendfile        on;         # 开启高效文件传输模式#tcp_nopush     on;keepalive_timeout  65;      # 长连接的超时时间#gzip  on;      # 对特定类型的响应进行gzip压缩include /etc/nginx/conf.d/*.conf;   # 包含其他配置}

/etc/nginx/conf.d/default.conf: 精简之后的内容如下 ,当然,这个子配置文件

 server {listen       80;        # 监听端口server_name  localhost; # 设置服务器的名称或IP地址​location / {            # /:匹配所有请求root   /usr/share/nginx/html;   # Nginx默认的静态文件存放目录index  index.html index.htm;    # 指定当请求是一个目录时,默认返回的文件}​error_page   500 502 503 504  /50x.html;    # 定义服务器响应某些错误状态时显示的页面location = /50x.html {                  # 精确匹配/50x.html的请求root   /usr/share/nginx/html;       # 错误页面存放目录}   

3、默认首页修改

(1)下面修改首页改为CSDN首页静态页面,先上传文件至/usr/nginx/html/目录下

 [root@centos html]# pwd/usr/share/nginx/html[root@centos html]# ls50x.html  index.html  CSDN[root@centos html]# tree -a.├── 50x.html├── CSDN│   ├── CSDN\ ...│   └── index.html      # 修改自己的首页文件名为index.html/或在配置文件中设置首页文件名├── index.html└── index.html

(2)修改子配置文件/etc/nginx/conf.d/default.conf:

 [root@centos html]# vim /etc/nginx/conf.d/default.confserver {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html/3D;    # 修改为自己静态文件目录index  index.html index.htm;        # 默认展示目录中的index文件}...

(3)检查并重新加载生效

 [root@centos html]# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful[root@centos html]# nginx -s reload

(4)在浏览器访问,发现主页已经变成我们设置的静态文件页面

4、Nginx日志文件

nginx 日志文件分为 log_formataccess_log 两部分,其中log_format格式为:

  log_format 样式名称 样式详情

配置文件中默认有:

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  /var/log/nginx/access.log  main;
变量说明
http_x_forwarded_for客户端的IP
$remote_user客户端的名称
$time_local访问时的本地时间
$request请求的URL和http协议
$status访问的状态码
$body_bytes_sent发送给客户端的主体内容大小
$http_referer记录客户端是从哪个页面链接访问过来的,若没有链接,则访问'-'
$http_user_agent记录客户端使用的浏览器相关信息

5、使用 limit_rate 限制客户端传输数据的速度

5.1、编辑/etc/nginx/nginx.conf

location / {root /var/www/nginx/;index index.html index.htm;limit_rate 2k;	# 对每个连接的限速为2k/s
}

6、Nginx错误页面配置

nginx错误页面包括404 403 500 502 503 504等页面,只需要在server中增加以下配置即可

#error_page 404 403 500 502 503 504 /404.html;
location = /404.html {root /usr/local/nginx/html;
}

注意:/usr/local/nginx/html/ 路径下必须有404.html这个文件!!!

404.html上如果引用其他文件的png或css就会有问题,显示不出来,因为其他文件的访问也要做配置; 为了简单,可以将css嵌入文件中,图片用base编码嵌入

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402998.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPC 和 HTTP 理解

网上充斥着各类类似于这样的文章:rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等。遇到这类文章,说明对 http 和 rpc 是由理解误区的。 这里再次重复强调一遍,通信协议不是 rpc 最重要的部分&#x…

【OpenCV 】插值的方法原理,图片缩放,矫正,边界填充

图像旋转 缩放 计算机中的图像是以数组的方式储存,每个位置储存了像素点的像素值。对图像进行旋转缩放,就是对数组进行操作,乘以对应的矩阵,进行空间变换,而矩阵的行列式的值,就是缩放的倍数。 进行缩放旋…

Erupt 项目搭建

创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10&#xff0c;erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配&#xff0c;3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…

AR 眼镜之-开关机定制-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 开关机定制 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;开机 Logo 2&#xff09;开机音效 3&#xff09;开机动画 4&#xff09;关机动画 5&#xff09;关机弹窗 2. &#x1f4a0; 开机 Logo…

Java基础——注释

在开发中注释是必不可少的&#xff0c;帮助我们更好的标记阅读代码&#xff0c;下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释&#xff0c;只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/&#xff0c;注释多行代…

ECharts 数据可视化 入门基本知识 下载安装常用的图表 【1】

ECharts一个基于 JavaScript 的开源可视化图表库&#xff0c;即将数据以图形或图像的方式展现成在屏幕上显示出来&#xff0c;这种方式称为数据可视化。数据可视化有助于我们分析数据&#xff0c;帮助我们更深入更直观的理解数据。今天回顾顺便总结一下echarts的基本知识&#…

C++密码管理器

先问一句 最近有几个关注我的原力等级为0或-1&#xff0c;文章全是转载&#xff0c;转载时间基本都在2021年&#xff0c;而且关注了很多人&#xff0c;这些是僵尸粉吗&#xff1f; 文末有投票&#xff0c;麻烦参与一下谢谢 实现功能列表 暂时还没做加密功能 打算用openssl/a…

HTTPS通讯全过程

HTTPS通讯全过程 不得不说&#xff0c;https比http通讯更加复杂惹。在第一次接触https代码的时候&#xff0c;不知道为什么要用用证书&#xff0c;公钥是什么&#xff1f;私钥是什么&#xff1f;他们作用是什么&#xff1f;非对称加密和对称加密是啥&#xff1f;天&#xff0c;…

可视化大屏入口界面,炫酷科技又不失简洁时尚。

可视化大屏界面&#xff0c;大家见到很多了&#xff0c;当可视化大屏是多个系统的融合&#xff0c;而且彼此又相互独立&#xff0c;就需要设计一个入口页面&#xff0c;便于分流客户&#xff0c;这次我给大家分享一批。 设计可视化大屏入口界面时&#xff0c;可以结合炫酷科技…

startData

某音startData 记得加入学习群&#xff1a; python爬虫&js逆向3 714283180

leetcode算法题之N皇后

N皇后也是一道很经典的问题&#xff0c;问题如下&#xff1a; 题目地址 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你…

记录Java使用websocket

实现场景&#xff1a;每在小程序中添加一条数据时&#xff0c;后台将主动推送一个标记给PC端&#xff0c;PC端接收到标记将进行自动播放音频。 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import or…

游戏管理系统

目录 Java程序设计课程设计 游戏管理系统 1系统简介 1.1需求分析 1.2 编程环境与工具 2系统总体设计 2.1 系统的功能模块图。 2.2 各功能模块简介。 3主要业务流程 &#xff08;1&#xff09;用户及管理员登录流程图 &#xff08;2&#xff09;信息添加流程 &#x…

即插即用的3D神经元注意算法

在快速发展的人工智能领域&#xff0c;科技的进步往往源于对复杂问题的突破性解决方案。如今&#xff0c;我们正站在一种激动人心的技术创新的前沿——即插即用的3D神经元注意算法。这一前沿技术不仅为计算神经科学提供了全新的视角&#xff0c;也为人工智能的未来打开了新的大…

Python教程(十四):Requests模块详解

目录 专栏列表前言&#xff1a;安装 Requests查看包安装情况&#xff1a; RESTful 介绍RESTful API设计原则示例 基本用法1. 查询ID为1的用户&#xff08;GET&#xff09;2. 创建新用户&#xff08;POST&#xff09;3. 更新ID 为 1 的用户&#xff08;PUT&#xff09;4. 删除ID…

18. 基于ES实战海量数据检索

18. 基于ES实战海量数据检索 一. 概述二. Elasticsearch 全文检索1. 分布式搜索引擎2. 搜索引擎种类3. 倒排索引三. elastic使用1. 官网介绍2. docker安装3. elasticsearch-head工具4. 分词与内置分词4.1 内置分词器(了解即可)4.2 `IK`中文分词器三. 整合SpringCloud1. 基础配置…

计算函数(c语言)

1.描述 //小乐乐学会了自定义函数&#xff0c;BoBo老师给他出了个问题&#xff0c;根据以下公式计算m的值。 // //其中 max3函数为计算三个数的最大值&#xff0c;如&#xff1a; max3(1, 2, 3) 返回结果为3。 //输入描述&#xff1a; //一行&#xff0c;输入三个整数&#xff…

视频汇聚/安防综合管理系统EasyCVR非管理员账户能调用分配给其他用户的通道是什么原因?

视频汇聚/安防综合管理系统EasyCVR视频监控平台&#xff0c;作为一款智能视频监控综合管理平台&#xff0c;凭借其强大的视频融合汇聚能力和灵活的视频能力&#xff0c;在各行各业的应用中发挥着越来越重要的作用。平台不仅具备视频资源管理、设备管理、用户管理、网络管理和安…

超精细CG杰作:8K壁纸级官方艺术插画,展现极致美丽与细节的汉服女孩

极致精美的数字艺术杰作&#xff1a;8K壁纸级别的官方插画&#xff0c;展现超高清细节与和谐统一的美感&#xff0c;女孩的精致面容与眼神在光影下熠熠生辉&#xff0c;汉服主题下的超高分辨率作品&#xff0c;文件巨大&#xff0c;细节丰富&#xff0c;令人惊叹。 正向提示词…

Android gradle 构建

Understanding Tasks - Gradle task kapt 是 Kotlin 语言的注解处理器&#xff0c;它是 Android Studio 中用于处理 Kotlin 注解的工具。它通过在编译期间生成代码来增强 Kotlin 代码的功能。需要 Kotlin 编译器来解析和处理注解&#xff1b;使用 APT 来生成代码&#xff0c…