当前位置: 首页 > news >正文

Nginx从开始到结束,简单到小白都能懂哦

绪论

大家好,很高兴能够为大家带来这篇关于Nginx配置的新手指南。在这篇博客中,我们将通过简单明了的图文教程,帮助大家快速上手Nginx配置,解锁Nginx的各种神奇功能!

一、Nginx简介

Nginx是一款功能强大的web服务器、反向代理服务器、负载均衡器和HTTP缓存服务器。相较于Apache等其他web服务器,Nginx在并发处理能力、内存占用和性能方面有显著优势,因此越来越受到开发者的喜爱。

二、安装Nginx

首先我们需要在电脑上安装Nginx,以下是不同操作系统下的安装方法:

1. 在Ubuntu系统中安装Nginx

打开终端,输入以下命令:

sudo apt update
sudo apt install nginx

2. 在CentOS系统中安装Nginx

打开终端,输入以下命令:

sudo yum install epel-release
sudo yum install nginx

3. 在Windows系统中安装Nginx

访问Nginx官方下载页面:nginx: download,下载Windows版Nginx,解压到任意目录即可。

安装完成后,请确保Nginx已经成功运行。

三、Nginx配置实例

在本节中,我们将通过一个简单的示例来演示如何配置Nginx。假设我们要将一个名为example.com的网站部署在本地服务器上,同时实现静态文件缓存以及负载均衡。

1. 配置虚拟主机

首先,我们需要在Nginx的配置文件中设置虚拟主机。打开/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf文件(根据你的安装路径),在http模块内部添加以下内容:

server {listen       80;server_name  example.com;location / {root   /var/www/example.com;index  index.html index.htm;}
}

在这段配置中,我们定义了一个监听80端口的服务器,将example.com域名指向本地`/var/www

/example.com目录,并设置首页为index.htmlindex.htm`。

2. 配置静态文件缓存

为了提高网站性能,我们可以将静态文件(如CSS、JavaScript、图片等)进行缓存。在server模块内部添加以下内容:

location ~* \.(jpg|jpeg|gif|png|css|js|ico)$ {root /var/www/example.com;expires 30d;
}

这段配置表示所有以.jpg.jpeg.gif.png.css.js.ico结尾的文件将被缓存30天。

3. 配置负载均衡

假设我们有两台后端服务器(192.168.1.100和192.168.1.101),我们希望通过Nginx进行负载均衡。在http模块内部添加以下内容:

upstream backend {server 192.168.1.100;server 192.168.1.101;
}

 然后在server模块内部添加以下内容:

location /api {proxy_pass http://backend;
}

这样,所有访问/api的请求将被转发至backend定义的后端服务器。

4. 重启Nginx

配置完成后,我们需要重启Nginx使新的配置生效。在Ubuntu和CentOS系统中,输入以下命令:

sudo systemctl restart nginx

在Windows系统中,进入Nginx安装目录,运行以下命令:

nginx.exe -s reload

至此,我们已经成功配置了Nginx,实现了虚拟主机、静态文件缓存和负载均衡功能。

四、安装总结

本篇博客通过图文教程,详细介绍了如何配置Nginx,帮助初学者轻松上手。Nginx作为一款功能强大的服务器,具有广泛的应用场景,后续还可深入学习其他高级功能。希望这篇博客能为你的Nginx学习之路提供一些帮助

五、常见配置解析

由于Nginx具有丰富的功能和灵活性,配置文件可能会因实际需求而有很大差异。但是,我们可以列举一个较全面的Nginx配置文件示例,包含了常用的功能和配置。请注意,这个配置仅作为参考,实际应用中可能需要根据需求进行调整。

# 用户和工作进程数
user  nginx;
worker_processes  auto;# 错误日志文件及日志级别
error_log  /var/log/nginx/error.log warn;# 进程ID文件
pid        /var/run/nginx.pid;# 事件模块配置
events {worker_connections  1024; # 单个工作进程的最大连接数use epoll; # 事件模型(epoll、kqueue等)multi_accept on; # 是否同时接受新连接
}# HTTP模块配置
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_log  /var/log/nginx/access.log  main;# TCP连接配置sendfile        on;tcp_nopush      on;tcp_nodelay     on;# 连接超时时间keepalive_timeout  65;# gzip压缩设置gzip  on;gzip_disable "msie6";gzip_vary on;gzip_proxied any;gzip_comp_level 6;gzip_buffers 16 8k;gzip_http_version 1.1;gzip_min_length 256;gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;# 虚拟主机配置include /etc/nginx/conf.d/*.conf;
}

以下是对上述配置文件中的各部分进行详细解析:

  1. user:定义运行Nginx的用户,默认为nginx
  2. worker_processes:工作进程数,设置为auto时,将根据服务器的CPU核心数自动设置进程数。
  3. error_log:错误日志文件的路径和日志级别。
  4. pid:进程ID文件的存储路径。
  5. events:事件模块配置。
    • worker_connections:单个工作进程的最大连接数。
    • use:事件模型,如epollkqueue等。
    • multi_accept:是否同时接受新连接。
  6. http:HTTP模块配置。 - include:包含其他配置文件,这里是包含MIME类型定义文件。 - default_type:默认MIME类型,当请求的资源类型未定义时使用。 - log_formataccess_log:访问日志的格式和存储路径。 - sendfile:启用或禁用sendfile功能,用于提高静态文件传输速度。 - tcp_nopush:启用或禁用TCP_NOPUSH选项,可以提高网络传输效率。 - tcp_nodelay:启用或禁用TCP_NODELAY选项,减少网络延迟。 - keepalive_timeout:连接超时时间,单位为秒。 - gzip:gzip压缩设置,包括启用/禁用、兼容性设置、压缩级别、缓冲区大小等。 - include:包含虚拟主机配置文件。这里是包含/etc/nginx/conf.d/*.conf目录下的所有配置文件。

除了上述基本配置之外,还有许多其他的配置选项和功能,例如:

  • 负载均衡(upstreamproxy_pass
  • 反向代理(proxy_*相关指令)
  • SSL证书配置(ssl_certificatessl_certificate_key
  • 虚拟主机(server模块)
  • URL重写(rewrite指令)
  • 缓存配置(proxy_cache_pathproxy_cache等)
  • 防火墙和访问控制(allowdeny等)

具体配置选项和功能需要根据实际需求进行调整和优化。更多关于Nginx配置和功能的详细信息,可以参考官方文档:nginx documentation。

六、安装三方插件

Nginx支持通过安装第三方模块来扩展其功能。根据模块的安装情况,我们将介绍如何为已安装的Nginx添加第三方模块,以及如何在安装Nginx时直接添加第三方模块。这里以添加一个流行的模块ngx_http_auth_pam_module为例。

为已安装的Nginx添加第三方模块

1. 下载Nginx源码包

首先,需要获取与已安装Nginx相同版本的源码包。访问Nginx官方下载页面:nginx: download,下载与当前安装版本相同的源码包。

2. 解压源码包

将下载的源码包解压至一个目录。例如:

tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1/

3. 下载第三方模块

下载第三方模块的源码。例如,ngx_http_auth_pam_module模块可以从GitHub上获取:

git clone https://github.com/stogh/ngx_http_auth_pam_module.git

4. 获取已安装Nginx的编译参数

运行以下命令,获取当前已安装Nginx的编译参数:

nginx -V

5. 编译Nginx

使用原始编译参数,加上第三方模块参数,重新编译Nginx。例如:

./configure --with-http_ssl_module --add-dynamic-module=../ngx_http_auth_pam_module make sudo make install

注意替换--with-http_ssl_module为实际获取到的编译参数。

6. 加载模块

编辑Nginx配置文件(如:/etc/nginx/nginx.conf),在http模块内部添加以下内容:

load_module modules/ngx_http_auth_pam_module.so;

7. 重启Nginx

重新加载配置并重启Nginx:

sudo nginx -s reload

现在已成功为已安装的Nginx添加了第三方模块。

在安装Nginx时添加第三方模块

1. 下载Nginx源码包

访问Nginx官方下载页面:nginx: download,下载所需版本的源码包。

2. 解压源码包

将下载的源码包解压至一个目录。例如:

tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1/

3. 下载第三方模块

下载第三方模块的源码。例如,`ngx_http_auth_pam_module`模块可以从GitHub上获取: ```bash git clone https://github.com/stogh/ngx_http_auth_pam_module.git

 

4. 安装依赖库

在安装Nginx之前,确保已安装所需的依赖库。例如,安装libpam-dev库(ngx_http_auth_pam_module所需):

sudo apt-get install libpam-dev

5. 配置、编译和安装Nginx

使用./configure命令,添加所需的模块和参数,然后编译和安装Nginx。例如:

./configure --with-http_ssl_module --add-module=../ngx_http_auth_pam_module make sudo make install

注意替换--with-http_ssl_module为实际需要的编译参数。

6. 启动Nginx

启动Nginx:

sudo /usr/local/nginx/sbin/nginx

至此,已在安装Nginx时添加了第三方模块。

以上就是为已安装的Nginx添加第三方模块和在安装Nginx时添加第三方模块的详细步骤。在为Nginx添加模块时,请确保充分了解模块的功能、依赖项和配置方法。

相关文章:

Nginx从开始到结束,简单到小白都能懂哦

绪论 大家好,很高兴能够为大家带来这篇关于Nginx配置的新手指南。在这篇博客中,我们将通过简单明了的图文教程,帮助大家快速上手Nginx配置,解锁Nginx的各种神奇功能! 一、Nginx简介 Nginx是一款功能强大的web服务器…...

Qt——Qt控件之按钮-QDialogButtonBox对话框按钮盒子控件的使用总结(例程:自定义按钮)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...

数据库学习-常用的SQL语句

背景: 汇整一下自己学习数据库过程中常见的题目及语句。 一.实例分析题 二.简单SQL查询: 1):统计每个部门员工的数目select dept,count(*) from employee group by dept;2):统计每个部门员工的数目大于一个的记录se…...

5种获取JavaScript时间戳函数的方法

5种获取JavaScript时间戳函数的方法 一、JavasCRIPT时间转时间戳方法一:Date.now()方法二:Date.parse()方法三:valueOf()方法四:getTime()方法五:Number 二、js时间戳转时间方法一:生成2022/1/18 上午10:09…...

图的宽度优先遍历

文章目录 图的宽度优先遍历程序设计程序分析图的宽度优先遍历 【问题描述】根据输入图的邻接矩阵A,给出图的宽度优先遍历序列; 【输入形式】第一行为图的结点个数n,第二行输入顶点的信息,每个顶点用一个字符表示,接下来的n行为图的邻接矩阵A。其中A[i][j]=1表示两个结点邻…...

企业AD域(域控服务器)的安装和配置详细教程

一、环境以及工具准备 软件:VMWare Workstation 2016 ( 下载链接:https://pan.baidu.com/s/1iX1VRilerYPGbGvX4pvaKw 提取码:75R6 ) 镜像:Windows Server 2016 ( 下载地址&#xff…...

面试官:一千万的数据,你是怎么查询的?

面试官:一千万的数据,你是怎么查询的? 1 先给结论 对于1千万的数据查询,主要关注分页查询过程中的性能 针对偏移量大导致查询速度慢: 先对查询的字段创建唯一索引 根据业务需求,先定位查询范围&#xff08…...

IntelliJ 上 Azure Event Hubs 全新支持来了!

大家好,欢迎来到 Java on Azure Tooling 的3月更新。在这次更新中,我们将介绍 Azure Event Hubs 支持、Azure Functions 的模板增强,以及在 IntelliJ IDEA 中部署 Azure Spring Apps 时的日志流改进。要使用这些新功能,请下载并安…...

性能测试,监控磁盘读写iostat

性能测试,监控磁盘读写iostat iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU使用情况。同vmstat一样,ios…...

steam游戏搬砖项目怎么做?月入过万的steam搬砖项目教程拆解

steam游戏搬砖项目怎么做?月入过万的steam搬砖项目教程拆解 大家好,我是童话姐姐,今天继续来聊Steam搬砖项目。 Steam搬砖项目也叫CSGO搬砖项目,它并不是什么刚面世的新项目,是已经存在至少七八年的一个资深老牌项目。这个项目…...

协同运力、算力、存力,加速迈向智能世界

2023年4月20日,华为在HAS2023期间举办“迈向智能世界”主题论坛,吸引了来自全球的分析师、专家学者及媒体与会。会上,华为ICT战略与Marketing总裁彭松发表了“持续技术创新,加速迈向智能世界”的主题演讲。 华为ICT战略与Marketin…...

被裁员了,要求公司足额补缴全部公积金,一次补了二十多万!网友兴奋了,该怎么操作?...

被裁员后,能要求公司补缴公积金吗? 一位网友问: 被裁员了,要求公司把历史公积金全部足额缴纳,现在月薪2.3万,但公司每个月只给自己缴纳300元公积金,结果一次补了二十多万,一次性取出…...

家庭智能插座一Homekit智能

传统的灯泡是通过手动打开和关闭开关来工作。有时,它们可以通过声控、触控、红外等方式进行控制,或者带有调光开关,让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块,可与手机、家庭智能助手、或其他智能硬件进行通信&#x…...

什么是雪花算法?啥原理?

1、SnowFlake核心思想 SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。 其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳,基本上保持自增的&#xf…...

【华为OD机试真题】 统计差异值大于相似值二元组个数(javapython)

统计差异值大于相似值二元组个数 知识点数组进制转换Q整数范围循环 时间限制:1s空间限制:256MB限定语言:不限 题目描述: 题目描述:对于任意两个正整数A和B,定义它们之间的差异值和相似值: 差异值:A、B转换成二进制后,对于二进制的每一位,对应位置的bit值不相同则为…...

【cmake篇】选择编译器及设置编译参数

实际开发的过程中,可能有多个版本的编译器,不同功能可能需要设置不同的编译参数。 参考文章链接:选择编译器及设置编译器选项 目录 一、选择编译器 1、查看系统中已有的编译器 2、选择编译器的两种方式 二、设置编译参数 1、add_compil…...

MySQL having关键字详解、与where的区别

1、having关键字概览 1.1、作用 对查询的数据进行筛选 1.2、having关键字产生的原因 使用where对查询的数据进行筛选时,where子句中无法使用聚合函数,所以引出having关键字 1.3、having使用语法 having单独使用(不与group by一起使用&a…...

CSS中相对定位与绝对定位的区别及作用

CSS中相对定位与绝对定位的区别及作用 场景复现核心干货相对定位绝对定位子绝父相🔥🔥定位总结绝对定位与相对定位的区别 场景复现 在学习前端开发的过程中,熟练掌握页面布局和定位是非常重要的,因此近期计划出一个专栏&#xff…...

7.1 基本运放电路(1)

集成运放的应用首先表现在它能构成各种运算电路上,并因此而得名。在运算电路中,以输入电压作为自变量,以输出电压作为函数;当输入电压变化时,输出电压将按一定的数学规律变化,即输出电压反映输入电压某种运…...

交友项目【首页推荐,今日佳人,佳人信息】

目录 1:首页推荐 1.1:接口地址 1.2:流程分析 1.3:代码实现 2:今日佳人 1.1:接口地址 1.2:流程分析 1.3:代码实现 3:佳人信息 1.1:接口地址 1.2&am…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...