Nginx-简介

2023-11-19

用Python语言开发的站点使用的Web服务器主要有Nginx、Apache以及淘宝的Tengine。Nginx是由Igor Sysoev在2004年发布的一个开源、高性能的HTTP服务器和反向代理,它还可以用来作为IMAP/POP3的代理服务器。它能被广泛使用,有如下原因:

  • 作为Web服务器,它处理静态文件、索引文件的效率非常高
  • Nginx的设计非常注重效率,它支持epoll/kqueue等网络I/O模型,可以最大支持5W个并发连接,并且只占用很少的内存资源。
  • 稳定性高,宕机的概率很低
  • 强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力
  • 配置简单。配置文件通俗易懂,上手很容易
  • 支持热部署,可以在不间断服务器的情况下对软件进行升级。
  • 提供健康检查支持,当后端出现问题时,就不再往这个后端分发请求,并且还会做后续的检查,知道这个后端恢复正常。

Nginx模块化

Nginx模块化的思想是一个很久的概念,但也正是成熟的思想照就了Nginx的巨大优越性。我们知道Nginx从总体上来讲是由许多个模块构成的。习惯将Nginx分为5大模块:核心模块,标准HTTP模块,可选HTTP模块,邮件服务模块和第三方模块。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6z6fsqp-1571049706679)(https://github.com/Mr-ycx/Resources/blob/master/nginx_server.png?raw=true)]

5个模块重要性依次递减

  • 核心模块:核心模块是Nginx服务器正常运行必不可少的一个模块,它如同系统的内核。它提供了Nginx最基本的服务,像进程管理,权限控制和错误日志等
  • 标准HTTP模块:标准HTTP模块支持标准HTTP的功能
  • 可选HTTP模块:可选HTTP模块主要用于拓展标准的HTTP功能,让Nginx处理一些特殊的服务
  • 邮件服务模块:邮件服务模块主要用于支持Nginx的邮件服务
  • 第三方模块:第三方模块是为了拓展Nginx服务器的应用,完成开发者想要的功能

反向代理和正向代理

正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端。代理和客户端在一个局域网,对于服务端是透明的。反向代理,根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。代理和服务器在一个局域网,对客户端是透明的。Nginx是反向代理的最佳选择,那么为什么需要反向代理呢?反向代理有如下作用:

  • 提高动态语言的I/O处理能力,Python、PHP、Java这样的动态服务的I/O处理能力不高,反向代理可以缓冲请求,交给后端一个完整的HTTP请求,同样,Nginx也可以缓冲响应,也达到了减轻后端的压力。
  • 加密和SSL加速
  • 安全。它保护和隐藏了原始资源服务器,还可以用作应用防火墙防御一些网络攻击。
  • 负载均衡。它帮应用服务器分配请求,以达到资源使用率最佳、吞吐率最大、响应时间最小的目的
  • 缓存静态内容。代理缓存通常可以满足相当数量的网站请求,大大降低应用服务器上的负载
  • 支持压缩。通过压缩优化可以提高网站访问速度,还能大大减少宽带的消耗

安装

apt-get install nginx

安装程序把Nginx以服务的形式安装在系统中,相关的程序及程序文件路径如下:

  • 程序文件:/usr/sbin/nginx
  • 全局配置文件:/etc/nginx/nginx.conf
  • 访问日志文件:/var/log/nginx/access.log
  • 错误日志文件:/var/log/nginx/error.log
  • 站点配置文件:/etc/nginx/sites-enabled/default

全局配置与站点配置

Nginx安装后以默认的方式启动,在开发调试的过程中可能需要调整Nginx的运行参数,这些运行参数通过全局配置文件(nginx.conf)和站点配置文件(sites-enabled/*)进行设置。对全局配置文件(/etc/nginx/nginx.conf)中关键可设置参数解析如下:

# 定义运行Nginx的用户
user www-data;    

# Nginx进程数,应设置与系统CPU数量相等的数值
worker_processes 4;

# 每个Nginx进程可以打开的最大文件数
worker_rlimit_nofile 65535;

events {
    # 每个Nginx进程允许最大客户端连接数
    worker_connections 768;
    
    # 在Nginx接到一个新连接通知后调用accept()来接收尽量多的连接
    multi_accept off;
}

http {
    # 是否允许文件上传
    sendfile on;
    
    # 上传文件大小限制
    client_header_buffer_size 32k;
    
    # 防止网络阻塞
    tcp_nopush on;
    
    # 防止网络阻塞
    tcp_nodelay on;
    
    # 允许客户端长连接最大秒数
    keepalive_timeout 65;
    
    # Nginx散列表大小。值越大,占用的内存空间越大,但路由速度越快
    types_hash_max_size 2048;
    
    # 访问日志文件路径名
    access_log /var/log/nginx/access.log;
    
    # 错误日志文件路径名
    error_log /var/log/nginx/error.log
    
    # include命令加载站点配置文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

在每个Nginx服务器中可以运行多个Web站点,每个站点的配置通过站点配置文件设置。每个站点应该以一个单独的配置文件存放在/etc/nginx/sites-enabled 目录中,默认站点的配置文件名为/etc/nginx/sites-enabled/default,对其中关键内容的解析如下:

server {
    # 配置站点监听的端口
    listen 80;
    
    # 配置HTTP根页面目录
    root /usr/share/nginx/html;
    
    # 配置HTTP根目录中的默认页面
    index index.html index.html;
 
    # 站点监听的IP地址,默认的localhost只可用于本机访问,一般需要将其更改为真实IP
    server_name localhost;
    
    # location 用于配置URL的转发接口
    location /user/ {
        # 此处配置http://server_name/user/的转发地址
        proxy_pass http://127.0.0.1:8080;
    }
    
    # 错误页面配置,如下配置定义HTTP 404错误的显示页面为/404.html
    error_page 404 /404.html;
}

检查Nginx配置文件的语法

nginx -t -c /etc/nginx/nginx.conf

启动Nginx服务器

sudo service nginx start

查看Nginx服务的状态

sudo service nginx status

停止Nginx服务器

sudo service nginx stop

重启Nginx服务器

sudo service nginx restart
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx-简介 的相关文章

  • 如何在 Nginx 中将会话/cookie 从主域传递到子域?

    因此 我的主域中有一个子域的 iframe 页面 并且该子域页面需要用户登录并具有要访问的成员资格 基本上我需要将会话变量和 cookie 传递到子域以便加载 iframe 我怎样才能在 Nginx 中实现这一目标 饼干有一个domain属
  • 您是否正在尝试将目录挂载到文件上(或反之亦然)?

    我有一个带有版本的docker17 06 0 ce 当我尝试使用 docker 和命令安装 NGINX 时 docker run p 80 80 p 8080 8080 name nginx v PWD www www v PWD conf
  • nginx 不为 ssl 中的 Rails 资产提供服务

    我正在我的 nginx nginx 版本 nginx 1 4 1 Ubuntu rails Rails 3 2 16 和 unicorn unicorn v4 7 0 vps 中安装自签名 ssl 证书 没有 ssl 一切看起来都很好 但自
  • 如何在 nginx.conf 中引用操作系统环境变量

    在 nginx conf 中 设置变量后set name value 我可以像这样参考它 name 但是当我导出操作系统环境变量时 经过env name from env like https nginx org en docs ngx c
  • Nginx 对 cms 后端的重写规则

    我需要在 nginx 服务器中制定 url 重写规则 服务器块 就像我之前的 apache 服务器一样 这是 htaccess 中的代码 我需要将其实现 转换 到我现有的代码中 RewriteRule A Za z0 9 A Za z0 9
  • 使用 nginx 代理时在 RStudio 中运行闪亮的应用程序

    我正在尝试使用通过 nginx 代理的 RStudio 服务器来开发一个闪亮的应用程序 当我使用 RStudio 而不是服务器 来运行闪亮的应用程序时 一切正常 但是 当我通过代理 RStudio 运行时 该应用程序出现在 查看器 窗格中
  • 为什么 Nginx 以相反的顺序提供客户端 SSL DN?

    我很好奇为什么某些 Web 服务器 例如 Nginx 以相反的顺序提供客户端 SSL DN Web 应用程序将 DN 发布到 Java Web 服务 该服务尝试创建 Javajavax naming ldap LdapName http d
  • 为从 nginx 反向代理转发的请求添加唯一 id

    我们运行 nginx 作为反向代理 将请求转发到运行 Compojure 的 Clojure 应用程序 Compojure 是一个封装 Jetty 的库 为我们的应用程序提供服务 Web 请求的能力 目前 我们捕获 nginx 和 Cloj
  • 如何设置 Nginx URI 以修复重定向到指定位置中的空 URI

    问题 当使用包含 符号的无效 URL 访问我们的网站时 Nginx 会抛出 400 Bad Request 错误 我们希望将请求重写为 WordPress 404 页面 而不是 Nginx 页面 我已经尝试过以下方法 location 40
  • 如何在 Docker 容器中运行 Nginx 而不停止?

    我在 Docker 容器上安装了 Nginx 并尝试像这样运行它 docker run i t p 80 80 mydockerimage usr sbin nginx 问题是 Nginx 的工作方式是 初始进程立即生成一个 Nginx 主
  • 验证来自两个不同 URL 的 Keycloak 令牌

    我有一个Docker compose具有后端和前端组件的基于系统 后端写的是Python Flask并在多个 docker 容器中运行 前端编写为TypeScript with Angular 前端通过Restful API与后端进行通信
  • Docker 与 nginx 组合不断显示欢迎页面

    我是新来的docker并尝试使用最简单的 docker compose yml 显示一个 hello world 页面 并在此基础上构建最终完整的LEMP堆栈它将与我的服务器具有相同的配置 然而大多数教程已经过时 并且有很多使用方法dock
  • `uwsgi_modifier1 30` 指令没有按照记录从 PATH_INFO 中删除 SCRIPT_NAME

    这是我的 nginx 虚拟主机配置 debian cat etc nginx sites enabled mybox server listen 8080 root www index index html index htm server
  • Node + Express + Nginx 未设置 Cookie

    我有一个使用 Express 的 Node 应用程序 我尝试为我的客户端设置 cookie 它在本地环境 http 上运行良好 但是一旦我投入生产 https 我就很好地收到了cookie 我可以在响应中看到它 但它没有设置 任何想法 Ng
  • 我怎样才能重写这个nginx“if”语句?

    例如 我想这样做 if http user agent MSIE 6 0 http user agent MSIE 7 0 etc etc rewrite ROOT ROOT ancient last break 而不是这个 if http
  • nginx docker 容器:502 错误网关响应

    我有一个服务监听 8080 端口 这不是一个容器 然后 我使用官方镜像创建了一个 nginx 容器 docker run name nginx d v root nginx conf etc nginx conf d p 443 443 p
  • Http POST 删除 URL 中的端口

    我有一个用 Django 构建的网络应用程序 我目前正在家里的路由器后面的笔记本电脑上运行它 我将路由器配置为将发送到特定端口的所有流量路由到该笔记本电脑 我将 Nginx 作为 Apache 的反向代理 使用 mod wsgi 来运行 D
  • 为什么 opcache 没有刷新?

    我用guzzlehttp guzzle封装在拉拉维尔 8 升级到后PHP 8 I get Symfony Component ErrorHandler Error FatalError Invalid opcode 117 2 0 in f
  • 常规请求期间 Django AJAX 请求未通过

    我有一个带有登录网页的 Django 站点 当提交页面上的登录表单时 它会执行登录视图 该视图会在其中运行一个需要很长时间处理 30秒左右 的函数 因此 为了在登录期间向客户端显示进度 一旦提交表单 登录页面上的 JS 函数就会开始向服务器
  • nginx位置正则表达式,匹配多次

    如何在 nginx 位置正则表达式中多次匹配 看来 x x 语法永远不起作用 例如 location abc w 1 3 从来不工作 您必须引用包含以下内容的位置 or 人物 location abc w 1 3 否则 nginx 将其解析

随机推荐

  • 基于tensorflow2.0+使用bert获取中文词、句向量并进行相似度分析

    本文基于transformers库 调用bert模型 对中文 英文的稠密向量进行探究 开始之前还是要说下废话 主要是想吐槽下 为啥写这个东西呢 因为我找了很多文章要么不是不清晰 要么就是基于pytorch 所以特地写了这篇基于tensorf
  • 请求后端返回的验证码显示的情况

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 情况一 数据是图片文件流 二 情况二 直接返回是图片 情况三 uni小程序的登录验证 最后 前言 在实际的项目中验证码登录几乎是每个开发人员的必备操作技能
  • [工具环境] pip&git lfs下载命令

    关键词 pip git lfs pip从git下载指定的提交版本 伴随着大模型的火热发展 PEFT和transformers也是更新频繁 常会看到requirements中安装的软件包来自github中的某个commit hash 比如re
  • 应用编排与管理:核心原理

    本节课程要点 K8s 资源的重要元信息 使用阿里云服务演示一下如何去修改或查看 K8s 重要元数据 详细分析控制器模式 总结控制器模式特点 资源元信息 1 Kubernetes 资源对象 首先 我们来回顾一下 Kubernetes 的资源对
  • g2o的基本使用

    参考 https www jianshu com p e16ffb5b265d 参考 https zhuanlan zhihu com p 36889150 图是一种数据结构 在图优化中 用顶点 vertex 表示优化变量 用边 edge
  • Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】

    最近一周在研究rom移植 所以就对Smali语言学习了一下 Smali语言其实就是Davlik的寄存器语言 Smali语言就是android的应用程序 apk通过apktool反编译出来的都有一个smali文件夹 里面都是以 smali结尾
  • 基于当前系统制作docker镜像

    1 通过tar 备份目录 tar cvpf home buildrpm tar directory exclude proc exclude sys exclude dev exclude run root localhost home l
  • 不能安装64位office提示已安装32位的

    问题描述 安装64位office办公软件的时候提示已经安装32位的office办公软件所以无法继续安装 但实际上之前安装的32位的office办公软件已经卸载了 问题现象截图如下 解决办法 从问题描述中 我们其实已经能够看出问题原因了 类似
  • React的超详细讲解

    React React的重点 webpack webpack 是一个现代 JavaScript 应用程序的静态模块打包器 module bundler 当 webpack 处理应用程序时 它会递归地构建一个依赖关系图 dependency
  • 虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(一)

    UPCGBlueprintElement是PCGGraph中自定义节点的基类 但官方目前还没有给出详细的文档 所以从源代码里找点答案 文章目录 可覆盖函数 Override Functions Excute 和 Excute with Co
  • web.xml加载顺序

    web xml加载顺序 应用服务器启动时web xml加载过程 至于这些节点在xml文件中的前后顺序没有关系 不过有些应用服务器 我曾碰到过的 websphere就严格要求web xml的节点顺序 否则部署不成功 所以还是赞成按照web x
  • CSS 样式穿透

    1 穿透语法 如果给样式中声明scop 那么页面的类会增加data 562e3wue8等属性 此时就需要用到 gt gt gt 或者 deep 或者 v deep 以后用后两个比较多 如果在样式类前面 v deep 则会自动找到 data
  • 快速搭建一个自己的服务器详解(java环境)

    一 服务器的购买 1 我选择的是阿里云的服务器 学生价9 5元一个月 百度直接搜索阿里云 然后点击右上角登录 推荐大家用支付宝扫码登录 方便快捷 阿里云官网的东西比较多 登录后我找了很久也没有找到学生服务器在哪里卖 最后在咨询里找到了这个网
  • 喜爱夜蒲3_百度百科

    喜爱夜蒲3 百度百科 喜爱夜蒲3
  • LeetCode707.设计链表

    题目描述 707 设计链表 力扣 LeetCode 这道题用单向链表和双向链表都能写 因为对双向链表不是很熟 所以就用双向链表来写了 由于初始化的链表并没有放入任何元素 所以这个结点就当成哑结点来处理 而且这样对之后的增删操作也更便利 C语
  • 通配符的使用

    通配符是一种特殊语句 主要有星号 和问号 用来模糊搜索文件 当查找文件夹时 可以使用它来代替一个或多个真正字符 当不知道真正字符或者懒得输入完整名字时 常常使用通配符代替一个或多个真正的字符 SQL 通配符 在搜索数据库中的数据时 SQL
  • java最大线程数

    Xms 初始堆大小 如 Xms256m Xmx 最大堆大小 如 Xmx512m Xmn 新生代大小 通常为 Xmx 的 1 3 或 1 4 新生代 Eden 2 个 Survivor 空间 实际可用空间为 Eden 1 个 Survivor
  • 华为OD机试 - 经典屏保(Java)

    题目描述 DVD机在视频输出时 为了保护电视显像管 在待机状态会显示 屏保动画 如下图所示 DVD Logo在屏幕内来回运动 碰到边缘会反弹 请根据如下要求 实现屏保Logo坐标的计算算法 屏幕是一个800 600像素的矩形 规定屏幕的左上
  • PermissionError: [WinError 5] 拒绝访问。解决办法

    PermissionError WinError 5 拒绝访问 问题描述 解决办法 一 找到programdata下anaconda3的python 二 进入Users的权限 将除了特殊权限外 全部挂上 三 在返回到anaconda3的目录
  • Nginx-简介

    用Python语言开发的站点使用的Web服务器主要有Nginx Apache以及淘宝的Tengine Nginx是由Igor Sysoev在2004年发布的一个开源 高性能的HTTP服务器和反向代理 它还可以用来作为IMAP POP3的代理