Nginx介绍

简介:

  • Nginx是由伊戈尔.塞索耶夫开发的,在04年10月开源的一款高性能HTTP和反向代理服务器。
  • 因为它的稳定性好,功能丰富,有示例配置文件和较低的系统资源消耗而闻名
  • 同时也是一款轻量级的Web服务器、反向代理服务器、和电子邮件代理服务器

官网:

特点:

  Nginx是一款高性能的Web和反向代理服务器。具有占用内存少,并发能力强的优势

  在同类型的网页服务器中表现十分优秀。具有反向代理、负载均衡、管理静态文件等功能。默认单台连接数5万

  • Nginx相比Apache使用资源更少,支持更多的并发连接体现出更高的效率,能够支持高达5万个并发连接数的响应
  • Nginx既可以在内部直接支持Redis和PHP,也可支持作为HTTP代理服务器对外进行服务,Nginx使用C编写不论是系统资源开销还是CPU使用效率都处理的非常优秀
  • Nginx安装简单、配置文件简洁、Bug少、Nginx启动容易,且几乎可以做到7 * 24小时不间断运行,即使运行数个月也不需要重新启动,还可以在不间断服务的情况下进行软件版本的升级

Nginx原理

工作原理:[正向代理:隐藏了用户的细节;反向代理:隐藏了服务器的细节]

  Nginx做HTTP服务器如蓝线所示,直接对接的是资源;

  Nginx做反向代理服务器如绿线所示,对接的是另外的服务器,Nginx只是做请求的转发处理

  

工作流程:

  • 开发模式

    浏览器(chrome) <=> 开发服务器(Flask WSGI Server/runserver) <=> Python程序(Flask) <=> 数据库(MySQL)

  • 生产模式

    浏览器(chrome) <=> 反向代理服务器(Nginx) <=> WSGI服务器(uWSGI) <=> Python程序(Flask) <=> 数据库(MySQL)

  • 工作流程:

   用户的请求访问到Nginx上面,Nginx会对后面的业务做负载均衡,反向代理。其后面可能会有多个python代码服务与其对接

   Python程序是不能直接在Nginx执行的,所有需要我们的Python程序在WSGI SERVER容器中去完成执行的,

   执行完后返回响应交个Nginx,执行完的python程序交个Nginx后,再由Nginx去返回给我们的客户端去响应

                    / WSGI SERVER 1    <======>    Python(Flask app)   <====> 数据库(MySQL)
client <----> Nginx - WSGI SERVER 2    <======>    Python(Flask app)   <====> 数据库(MySQL)
                    \ WSGI SERVER 3    <======>    Python(Flask app)   <====> 数据库(MySQL)

环境迁移:

  • pip freeze > requirements.txt 将当前项目所使用的依赖包列表(包名及版本号)保存到requirements.txt中

  • pip install -r requirements.txt 安装 requirements.txt 中所列举的依赖包

Nginx使用

安装:

  • 包管理工具安装

    • 去官网将所使用依赖添加到包管理工具中
    • 更新包管理工具资源
    • 使用包管理工具安装
  • 安装步骤:http://www.nginx.cn/doc/index.html参考
    • 下载公钥:

      • cd doc  : 进入到doc目录下
      • mkdir pgp_key   : 创建一个pgp_key文件
      • wget http://nginx.org/keys/nginx_signing.key  : 下载公钥
    • 添加元信息
      • sudo vim /etc/apt/sources.list   :打开/etc/apt/sources.list文件并编辑,

        • 将如下两行内容添加到打开的文件中末行(xenial是对应系统版本名字)
        • deb http://nginx.org/packages/ubuntu/ xenial nginx
        • deb-src http://nginx.org/packages/ubuntu/ xenial nginx
      • sudo apt update  :更新源信息
    • 添加Nginx源为信任
      • sudo apt-key add nginx_signing_key
    • 安装nginx 
      • sudo apt install nginx

控制:

  • 启动nginx:

    • sudo nginx
    • nginx启动后会有两个进程:master process(主进程)和worker process(从进程)
    • 杀死从进程后,主进程会自动分配一个新的从进程。
    • 杀死主进程后,如果从进程没有工作任务,会和主进程一起杀死
  • 查看nginx信息:
    • ps -ef | grep nginx (查看nginx进程状态)
    • nginx -v  (显示nginx的版本信息)
    • nginx -V  (显示nginx构建过程中的所有参数配置)
  • 控制nginx:
    • nginx -s signal
    • sudo nginx -s stop:  快速关闭
    • sudo nginx -s quit:   优雅关闭[推荐使用]
    • sudo nginx -s reload:重新加载配置
  • 通过系统命令控制nginx
    • systemctl status nginx: 查看nginx状态
    • systemctl start nginx:   启动nginx服务
    • systemctl stop nginx:   关闭nginx服务
    • systemctl enable nginx:设置开机自启
    • systemctl disable nginx:禁止开机自启
    • 不建议使用,nginx会加载配置文件,这种方式不能控制配置文件,容易出现未知错误

配置文件

  Nginx配置文件包含指定指令控制的模块。指令分为简单指令和块指令。

  一个简单指令由名称和参数组成,以空格分隔,并以分号结尾

  一个块指令和简单指令具有相同的结构,但不是以分号结束,而是以一个大括号包围的一堆附 加指令结束。

  如果一个大括号内可以有其他的指令,它就被称为一个上下文,比如(events,http,server,location)

  • 指令

    • nginx -t:不运行,仅测试配置文件
    • nginx -c configpath 从指定路径加载配置文件
    • nginx -t -c configpath 测试指定配置文件

项目部署

Nginx

   Django框架中自带的开发者服务器runserver虽然功能健壮,但性能是比较低仅适用于开发环境。

  在真实部署中不会像django中runserver那样使用单一服务器。而是使用Nginx做HTTP服务器处理静态资源,

  或者做反向代理和uWSGI(HTTP服务器)、gunicorn(HTTP服务器)对接。也可以做邮件服务器或流媒体服务器 

uWSGI

gunicorn

部署 --- Nginx的更多相关文章

  1. debian完整部署 Nginx + uWSGI + Django

    手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供 ...

  2. debian7下部署nginx服务器

    笔者是在vmware中的Debian7下部署nginx服务器,采用离线部署方式.过程如下: 1.准备好需要的离线安装包 nginx-1.6.2.tar.gz,pcre-8.34.tar.gz,open ...

  3. 在Docker下部署Nginx

    在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...

  4. 自动部署Nginx和nfs并架设Nginx集群脚本

    本人经过多次尝试,简单完成了自动部署Nginx和nfs脚本,并且能够自动部署web反向代理集群,下面详细的阐述一下本人的思路.(以下脚本本人处于初学阶段,写的并不是很完善,所以需要后期进行整理和修正, ...

  5. Linux中以单容器部署Nginx+ASP.NET Core

    引言 正如前文提到的,强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器,本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程.   Ng ...

  6. Windows Server 2008 R2 Enterprise x64 部署 nginx、tomcat、mysql

    部署nginx nginx主要做反向代理用,可以单独部署到其它机器上,这里nginx和tomcat部署在同一台机器上. 下载nginx-1.14.1.zip,并解压到目标目录,打开cmd进入到解压后的 ...

  7. windows10下面部署nginx(解决文件名中文乱码问题)

    由于开发需要,我们总是需要先在windows环境下面部署项目进行测试,通过之后才会移植到linux系统进行测试部署. 本篇文章会介绍一下windows终端下面部署nginx WEB服务的一些步骤流程, ...

  8. 【原创】大数据基础之Mesos+Marathon+Docker部署nginx

    一 安装 安装docker:https://www.cnblogs.com/barneywill/p/10343091.html安装mesos:https://www.cnblogs.com/barn ...

  9. centos7 下 安装部署nginx

    centos7 下 安装部署nginx 1.nginx安装依赖于三个包,注意安装顺序 a.SSL功能需要openssl库,直接通过yum安装: #yum install openssl b.gzip模 ...

  10. Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken

    前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)--技术流ken>,<Ansible常用模块介绍及使用(二)--技术流ken><Ansible剧本介绍及 ...

随机推荐

  1. Lua 学习之基础篇十<Lua 常见的语法规则>

    下面讲一些lua 常见的用法和规则,可以为学习理解lua带来帮助,最后附上的部分是lua的基本操作,基本包含所有常用语法语句. 1. if判断 lua把 nil 和false 视为"假&qu ...

  2. HDU 3824/ BZOJ 3963 [WF2011]MachineWorks (斜率优化DP+CDQ分治维护凸包)

    题面 BZOJ传送门(中文题面但是权限题) HDU传送门(英文题面) 分析 定义f[i]f[i]f[i]表示在iii时间(离散化之后)卖出手上的机器的最大收益.转移方程式比较好写f[i]=max{f[ ...

  3. 在 Linux 下使用 scp 命令

    将文件或文件夹从网络上的一个主机拷贝到另一个主机当中去. here:在 Linux 下使用 scp 命令 摘要: scp 是安全拷贝协议(Secure Copy Protocol)的缩写, scp 是 ...

  4. 边学边体验django--模型

    步骤: 1.选定数据库,然后修改 settings.py 中的 DATABASES配置 实验过了sqlite3. 应该是这个样子的: 2. 创建app, 建立数据表模型. python manage. ...

  5. Codeforces Round #350 (Div. 2) A B C D1 D2 水题【D2 【二分+枚举】好题】

    A. Holidays 题意:一个星球 五天工作,两天休息.给你一个1e6的数字n,问你最少和最多休息几天.思路:我居然写成模拟题QAQ. #include<bits/stdc++.h> ...

  6. Luogu P2151 [SDOI2009]HH去散步 矩乘加速DP

    思路:矩乘优化DP 提交:3次(用了一个奇怪的东西导致常数过大) 题解: 如果可以走完正向边后又走反向边那就显然了,但是不能走,所以我们要将正反向边分别编号,区分正反向边. 所以这道题的矩阵是以边的编 ...

  7. 关闭tomcat8080端口

    netstat -ano | findstr 8080taskkill /F /PID 1234

  8. 解决InputStream中数据读取不完整问题

    转载:https://blog.csdn.net/lilidejing/article/details/37913627 当需要用到InputStream获取数据时,这时就需要读取InputStrea ...

  9. chrome扩展开发实战入门之一-hellocrx

    后记:在写这篇文章时,我还没搞懂chrome扩展的基本原理.后来才明白,最简单(且实用)的扩展只需要manifest.json和content_scripts.js两个文件,无需background. ...

  10. 23333 又是一篇水文章(以下是各种复制来的关于maven转成eclipse项目)

    (转载) 当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢? 1. 定 ...