Linux下Nginx的安装与使用

news2024/11/5 12:32:56

Linux下Nginx的安装与使用

博客: www.lstar.icu

开源地址
Gitee 地址: https://gitee.com/lxwise/iris-blog_parent
Github 地址: https://github.com/lxwise/iris-blog_parent

序言

Nginx是一款轻量级的Web 服务器/反向代理服务器电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度京东新浪网易腾讯淘宝等。

优势

Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.20.0稳定版已经于2021年4月20日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license
Nginx 是一个很强大的高性能Web反向代理服务,它具有很多非常优越的特性:

  • 在连接高并发的情况下,NginxApache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。
  • Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
  • 处理静态文件索引文件以及自动索引,打开文件描述符缓冲
  • 无缓存的反向代理加速,简单的负载均衡容错
  • FastCGI,简单的负载均衡容错
  • 模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。
  • 支持 SSLTLSSNI
  • Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。
  • 代理服务器。作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
  • Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx安装

下载

1. Nginx的发行版本
Nginx发行版本介绍
Nginx 开源版https://nginx.org/:赤裸裸的Web服务器、反向代理、负载均衡(功能少,开发难度大)
Nginx Plus 商业版https://www.nginx.com/:什么都有全家桶(付费版本)
OpenRestyhttps://openresty.org/cn/:是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。
Tenginehttps://tengine.taobao.org/:淘宝二开的Nginx。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。
2. 下载nginx安装包
通过网页下载,上传到服务器

下载地址: https://nginx.org/en/download.html
在这里插入图片描述

直接通过wget下载
mkdir /opt/nginx
cd /opt/nginx
#下载nginx安装包
wget -c http://nginx.org/download/nginx-1.22.1.tar.gz

wget下载链接来自于官网的下载页面,点击下载,复制下载链接得来

注意:如果没有wget命令,需要先安装:(centos版本命令:)yum install -y wget

安装

1. 安装Nginx相关依赖

解压 nginx 源码包,进入源码包目录,执行预编译命令

nginx 的安装目录默认是 /usr/local/nginx--prefix 配置项缺省时默认就是该目录,但不建议省略该参数选项

#解压
tar -zxf nginx-1.22.1.tar.gz
#进入目录
cd nginx-1.22.1
#编译
./configure --prefix=/usr/local/nginx

当预编译出现以下报错时,表示没有 gcc 编译器,使用 yum 安装即可

nginx 是使用 c 语言编写的程序,因此想要运行 nginx 就需要安装一个编译工具。gcc 就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了 c 语言,运行以下命令安装即可:

  • 安装gcc
yum install -y gcc
  • 安装perl库
yum install -y pcre pcre-devel
  • 安装zlib库
yum install -y zlib zlib-devel
2. 编译安装
#基本编译
./configure --prefix=/usr/local/nginx

#带模块编译
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/var/run/nginx.pid --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_v2_module --with-http_realip_module --with-stream --with-stream_ssl_module

# make命令的功能是编译内核或源码文件。
make 
# 安装已经编译好的程序。复制文件树中到文件到指定的位置
make install
# 卸载已经编译好的程序。暂不执行
make uninstall

一些常用的模块,如http_stub_status_modulehttp_ssl_modulehttp_gzip_static_modulehttp_v2_modulehttp_realip_module以及streamstream_ssl_module。这些模块已经足够支持大部分常见的功能需求,包括SSL、gzip、HTTP/2、真实IP处理等。

但如果你有特定的需求,可以考虑添加以下模块:

  1. http_geoip_modulehttp_geoip2_module:用于根据IP地址获取地理位置信息。
  2. http_auth_request_module:支持子请求来实现复杂的认证机制。
  3. http_secure_link_module:可以用于安全的文件下载链接。
  4. http_sub_module:用于对响应内容进行文本替换。
  5. http_headers_more_module(第三方模块):允许设置和清除HTTP请求/响应头。

以下是关于编译安装的基础知识:

configure文件:这个文件是一个Shell脚本,用于检测系统环境、配置编译选项以及生成相应的Makefile文件。

Makefile文件是软件工程中的一种自动化构建工具文件,主要用于Unix-like操作系统(如Linux、BSD等)和一些集成开发环境(IDEs),用于管理和自动化编译、链接程序的过程。在Makefile中,开发者定义了一系列规则来指导make工具如何编译和链接源代码文件,以生成最终的目标文件(通常是可执行文件或库文件)。

Makefile的核心功能包括:

  1. 依赖关系:声明源代码文件之间的依赖关系,当某个源文件或其依赖的头文件发生变化时,仅重新编译受影响的部分而不是整个项目。
  2. 规则:定义如何从源文件生成目标文件的规则,包括编译器选项、编译命令、链接命令等。
  3. 自动化:通过比较文件的修改时间和目标文件的存在与否,make能自动判断哪些目标需要更新,并执行相应的命令。
  4. 目标:可以定义多种目标,如编译调试版、发布版,或者执行测试、清理等任务。
  5. 变量和函数:Makefile支持变量和函数,可以用来简化命令行参数和路径名的管理。
  6. 模式规则:允许定义通用的转换规则,适用于多个源文件到目标文件的转换情况。

在实际使用中,程序员通过编写Makefile来组织和控制整个项目的构建流程,只需简单地运行make命令,make工具就会读取Makefile文件,分析依赖关系,并执行必要的编译和链接步骤来生成最终的产品。

启动

进入到nginx安装目录下:

cd /usr/local/nginx/sbin

启动命令:

./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

查询nginx是否启动:

ps -ef | grep nginx

访问nginx页面:

在浏览器中输入 ip + 端口号访问(端口默认80)

这样就算安装成功了

在这里插入图片描述

如果浏览器访问不通,请检查是否开启防火墙限制,将防火墙关闭或将端口加入到防火墙白名单中,这里nginx的默认端口为80,如果是与服务器,还要去安全组开通对应的对口

关闭防火墙 :

#查看已放行的端口
firewall-cmd --list-all
#将80端口加入到防火墙放行白名单中,并重载防火墙
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

禁止防火墙开机启动

systemctl disable firewalld.service

安装成系统服务

#创建服务脚本
vi /usr/lib/systemd/system/nginx.service

服务脚本内容 :

[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target

重新加载系统服务

systemctl daemon-reload

启动服务

systemctl start nginx.service

查看服务是否自启动

systemctl list-unit-files|grep nginx.service
  • 如不是enabled可以运行如下命令设置自启动
systemctl enable nginx.service
  • 如果希望不进行自启动,运行如下命令设置
systemctl disable nginx.service

Nginx简介

1.目录结构

进入Nginx的主目录我们可以看到这些文件夹

#进入nginx目录
cd /usr/local/nginx/

client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp

其中这几个文件夹在刚安装后是没有的,主要用来存放运行过程中的临时文件

client_body_temp fastcgi_temp proxy_temp scgi_temp
  • conf
    用来存放配置文件相关
  • html
    用来存放静态文件的默认目录 html、css等
  • sbin
    nginx的主程序
  • logs

​ 用来存放日志

2.运行原理

在这里插入图片描述

3.配置文件说明

#user  nobody;#运行nginx的默认账号
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes  1;
 
#事件区块开始
events {
    #单个进程最大链接数(最大连接数=连接数*进程数)
    #根据硬件调整,与前面工作进程配合起来用,尽量大,但别把CPU跑到100%就行,每个进程允许的最多连接数,理论上为每台nginx服务器的最大连接数
    worker_connections  1024;
}
 
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中。
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;
    
    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设置为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载,注意:如果图片显示不正常把这个改成off
    #sendfile指令指定,nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime
    sendfile        on;
    #长连接超时事件,单位是秒
    keepalive_timeout  65;
 
  
    #第一个server区块开始,表示一个独立的虚拟主机站点
    server {
        #提供服务的端口,默认80
        listen       80;
        #提供服务的域名主机名
        server_name  localhost;
 
        
        #对 “/” 启动反向代理,第一个location区块开始
        location / {
            root   html;    #服务默认启动目录,可以改成指定的目录位置
            index  index.html index.htm; #默认的首页文件,多个用空格分开
        }
 
        #错误页面路由
        error_page   500 502 503 504  /50x.html; # 出现对应的http状态码是,使用50x.html回应客户
        location = /50x.html { # location区块开始,访问50x.html
            root   html; # 指定对应的站点目录为html
        }
 
    }
}

4.nginx.conf分块理解

在这里插入图片描述

  • **全局区域:**从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。必须上面的第一行配置
#允许的work process数
worker_processes  1;
# 引入其他配置文件,其他配置文件可以放在conf目录下的test文件夹下(没有自己创建一个)
include test/test.conf

这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理也越多,但是会受硬件、软件的设备的制约。

  • **events区域:**events块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker_process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大链接数等。
 worker_connections  1024;

样例中就表示每个work process支持的最大连接数为1024,这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置。

  • **http区域块:**这块是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。这里http块包含:http全局块、server 块

  • **http全局块:**http全局块配置的指定包括文件引入、MIME-TYPE定义、日志自定义、连接超时事件、单链接请求数上限等。

  • server块:

    这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。每个server块也分为server全局块以及可以同时包含多个location块。

    • 全局server块:最常见的配置就是本虚拟机主机的监听配置和本虚拟机的名称或IP配置。
    • **location块:**一个server块可以配置多个location块。这块的主要作用就是基于nginx服务器接收到的请求字符串(例如:server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等共鞥,还有许多第三方模块的配置也可以在这里进行。

Nginx基本使用

拓展Nginx常用命令

# 强制停止nginx命令
./nginx -s stop

# 优雅停止nginx命令,等最后一次交互执行完毕再停止
./nginx -s quit

# 重启nginx命令
./nginx -s reload

# 检查nginx配置文件是否有问题 -c参数指定了要加载的Nginx配置文件路径
./nginx -t

./nginx -t -c /usr/local/nginx/conf/nginx.conf
# 查看nginx版本信息
./nginx -v

# 查看nginx详细版本信息,注意是大写V
./nginx -V

# 重新打开日志文件
./nginx -s reopen

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 HAL库 SPI驱动1.3寸 OLED屏幕

目录 参考硬件引脚与接线 点亮屏幕CubeMX 配置OLED 驱动程序代码 参考 基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏(0.96寸 1.3寸通用)0.96 oled HAL库驱动 SPI STM32SPI驱动0.96/1.3寸 OLED屏幕,易修改为DMA控制STM32驱…

江协科技STM32学习- P26 UART串口外设

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

基于Abaqus的高纯铝不同应变率下单晶塑性变形的取向依赖性研究

文章题目:《Strain rate effect of high purity aluminum single crystals: Experiments and simulations》 文章doi:10.1016/j.ijplas.2014.10.002 推荐理由:作者研究了高纯铝不同应变率下单晶塑性变形的取向依赖性,不同应变率…

虚拟现实与增强现实:重塑娱乐和教育的边界!

内容概要 在这个瞬息万变的时代,虚拟现实(VR)和增强现实(AR)正如两位魔法师,腾云驾雾间掀起了一场教育与娱乐的革命。虚拟现实带我们飞跃平凡,进入一个充满奇迹的数字宇宙,仿佛我们…

【论文分享】利用机器学习和计算机视觉技术增强城市街道峡谷中的PM2.5实时监测

本文以兰州市为研究区域使用计算机视觉技术从交通摄像头拍摄的交通图像中提取实时交通流量和街景特征,以预测PM2.5浓度,并解释道路环境变化对PM2.5水平的影响。 【论文题目】 Enhancing urban real-time PM2.5 monitoring in street canyons by machine…

《双指针篇》---复写零(标的简单,实际比较复杂)

题目传送门 方法一:双指针 我们发现不能从前向后复写,因为会覆盖掉还没有被复写的数据 因此我们需要从后往前复写。 此时left应该指向最后一个被复写的数。 right指向数组最后一个元素 1.找到最后一个被复写的数据。我们用left指向 ①先判断left的位置0/…

Docker(二):Docker的基本使用

1 Docker的基本使用 1.1 镜像相关操作 1、从DockerHub搜索镜像 [rootmaster ~]# docker search centos # 镜像名字 描述 星标 是否官方(有OK表示为官方镜像) NAME …

SQL Server 可观测最佳实践

SQL Server 简介 SQL Server 是微软公司开发的一款关系数据库管理系统,支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。它支持多种操作系统平台,而无论是物理还是虚拟形式,自建部署环境还是在云环境中,运行的操作系…

PyEcharts | 认识图形--饼图和玫瑰图

饼图和玫瑰图 饼图玫瑰图rosetype 参数 饼图 from pyecharts.charts import Pie import pyecharts.options as optsfrom pyecharts.globals import CurrentConfig,NotebookType CurrentConfig.NOTEBOOK_TYPE NotebookType.JUPYTER_LAB CurrentConfig.ONLINE_HOST OnlineHos…

ros与mqtt相互转换

vda5050 VDA5050协议介绍 和 详细翻译-CSDN博客 ros与mqtt相互转换 如何转换的,通过某个中转包,获取ros的消息然后以需要的格式转换为mqtt 需要的参数 ros相关 parameters[ (ros_subscriber_type, vda5050_msgs/NodeState), (ros_subscriber_queue…

这几款AI搜索产品,你用过几个?

AI搜索产品逐步走进普通大众的视野,当然也会有更多的产品进入市场供大家选择。 以下是一些常见的 AI 搜索产品: 综合型 AI 搜索平台: Perplexity:海外较受欢迎的 AI 搜索引擎,拥有百万用户。它利用 GPT、Claude、Llam…

[代码随想录打卡 Day3] 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

(ง •_•)ง今天出去玩了,只刷完了视频,做了部分题,就是具体整理明天整理。希望坚持下去。啊啊啊啊啊啊啊啊啊啊啊 链表理论基础 基础的就是单链表。 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成&#xff0…

OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测

OpenCV基本操作(python开发)——(1) 读取图像、保存图像 OpenCV基本操作(python开发)——(2)图像色彩操作 OpenCV基本操作(python开发)——(3&…

LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务

论文标题:How to Specialize Large Vision-Language Models to Data-Scarce VQA Tasks? Self-Train on Unlabeled Images! 作者:Zaid Khan, Vijay Kumar BG, Samuel Schulter, Xiang Yu, Yun Fu, Manmohan Chandraker 期刊:CVPR 2023 DOI…

产品思维笔记(一):打造用户喜爱的产品by Marty Cagan

全文摘要 《启示录:打造用户喜爱的产品》是由美国著名产品经理Marty Cagan所著,他曾经是eBay最出色的产品经理之一,也是Google X实验室的创始人之一。在这本书中,他分享了自己的经验和教训,帮助读者更好地理解如何打造…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中,TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别,以通俗易懂的方式进行解释: 1. 模型层数 OSI 模型:有 7 层&#…

Unity humanoid 模型头发动画失效问题

在上一篇【Unity实战笔记】第二十二 提到humanoid 模型会使原先的头发动画失效,如下图所示: 头发摆动的是generic模型和动画,不动的是humanoid模型和动画 一开始我是尝试过在模型Optimize Game objects手动添加缺失的头发骨骼的,奈…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

Redis缓存在thinkPHP/fastAdmin框架中的应用

Redis缓存在thinkPHP/fastAdmin框架中的应用 引言 在现代Web开发中,性能优化是一个永恒的话题。随着用户数量的增加和业务逻辑的复杂化,如何提高应用的响应速度和处理能力成为了开发者们必须面对的挑战。缓存技术作为提升性能的有效手段之一&#xff0…

Rust 力扣 - 189. 轮转数组

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们观察数组的性质,可以通过翻转原数组,然后在翻转前k个元素,最后翻转k个之后的元素,最终就转换成了原数组的轮转数组 题解代码 impl Solution {pub fn rotate(…