公司使用nginx作为请求分发服务器,发现本人在查看nginx配置上存在些许困难,故仔细阅读了陶辉的《深入理解nginx模块开发与框架》第一部分,并作此记录。

了解

我根据书上的思路来了解nginx的作用及配置,首先回答提出的问题:

什么是Nginx?它有哪些特点?我们选择Nginx的理由是什么?如何编译安装Nginx?这种安装方式背后隐藏的又是什么样的思想呢?

1. 什么是Ngnix?

Nignx是一个跨平台的,支持高效处理大规模并发连接,高性能Web服务器。

2. 它有哪些特点?

1)快:单机响应更快,高并发响应快

2)高扩展性:它由耦合度极低的模块组成,对某一模块进行修复和升级时只需要关注模块自身

3)高可靠性:其核心框架代码的优秀设计、模块设计的简单性;每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。

4)低内存消耗

5)单机10w以上并发

6)热部署:master管理进程与worker工作进程的分离设计,保证在不间断服务的情况下,升级Nginx的可执行文件,更新配置项、更换日志文件等功能。

7)最自由的BSD许可协议:它还允许用户在自己的项目中直接使用或修改Nginx源码

3. 我们选择Nginx的理由是什么?

Nginx先天的事件驱动型设计、全异步的网络I/O处理机制、极少的进程间切换以及许多优化设计,都使得Nginx天生善于处理高并发压力下的互联网请求,同时Nginx降低了资源消耗,可以把服务器硬件资源“压榨”到极致。

编译安装

1. 首先我们需要一个内核为Linux 2.6及以上版本的操作系统,查看linux内核版本

[root@localhost ~]# uname -a

2. 安装GCC、PCRE、zlib、OpenSSL库

3. 磁盘目录

1)Nginx源码存放目录

2)Nginx编译阶段产生的中间文件存放目录(默认情况下,configure命令会将该目录命名为objs,并放在Nginx源代码目录下)

3) 部署目录
该目录存放实际Nginx服务运行期间所需要的二进制文件、配置文件等。默认情况下,该目录为/usr/local/nginx。

4) 日志文件存放目录

4. Linux内核参数的优化(不做了解)

5. 编译安装nginx

安装Nginx最简单的方式是,进入nginx-1.0.14目录后执行以下3行命令:

./configure
make
make install

1)configure命令做了大量的“幕后”工作,包括检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些C源码文件、Makefile文件等。

a. 当configure执行成功时会生成objs目录,并在该目录下产生以下目录和文件:

2)make命令根据configure命令生成的Makefile文件编译Nginx工程,并生成目标文件、最终的二进制文件。
3)make install命令根据configure执行时的参数将Nginx部署到指定的安装目录,包括相关目录的建立和二进制文件、配置文件的复制。

Nginx命令行

1. 默认方式启动(这时会读取默认路径下的配置文件:usr/local/nginx/conf/nginx.conf,实际上,在没有显式指定nginx.conf配置文件路径时,将打开在configure命令执行时使用--conf -path=PATH指定的nginx.conf文件)

2. 在不启动Nginx的情况下,测试配置信息是否有错误

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

3. 显示版本信息

[root@localhost ~]# /usr/local/nginx/sbin/nginx -v

4. 显示编译阶段的参数

[root@localhost ~]# /usr/local/nginx/sbin/nginx -V

5. 快速地停止服务

使用-s stop可以强制停止Nginx服务。-s参数其实是告诉Nginx程序向正在运行的Nginx服务发送信号量,Nginx程序通过nginx.pid文件中得到master进程的进程ID,再向运行中的master进程发送TERM信号来快速地关闭Nginx服务。

[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s stop

实际上,如果通过kill命令直接向nginx master进程发送TERM或者INT信号,效果是一样的。例如:

kill -s SIGTERM
kill -s SIGINT

6. “优雅”地停止服务

当快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。而“优雅”地停止服务时,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s quit

7. 使运行中的Nginx重读配置项并生效

使Nginx服务重新加载nginx.conf文件。
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -s reload

事实上,Nginx会先检查新的配置项是否有误,如果全部正确就以“优雅”的方式关闭,再重新启动Nginx来实现这个目的。

8. 查看帮助命令

[root@localhost nginx]# /usr/local/nginx/sbin/nginx -h

学到这有个灵感,当进入服务器怎么找到相应的配置文件呢:

1. 查看nginx进程

我们知道,nginx默认启动的是configure命令中 -conf -path=PATH中PATH路径的配置文件

2. 查看configure命令的参数

诺,找到配置文件的位置了,其他的配置也可以同过相同的方法找到

了解并安装Nginx的更多相关文章

  1. centos直接yum安装nginx

    Ubuntu下安装nginx,直接apt-get install nginx就行了,很方便. 但是今天装了CentOS6.2,直接yum install nginx不行,要先处理下源,下面是安装完整流 ...

  2. 安装Nginx服务

    Nginx最大特点: 静态小文件(1M),支持高并发,同时占用系统资源很少.3W并发,10个进程,内存150M. Nginx特点: 1.配置简单,灵活,轻量. 2.高并发(静态小文件),静态几万的并发 ...

  3. Linux下安装nginx

    一直会使用nginx,也学习了好多nginx知识.也在本地安装过nginx,这次是第一次在正式的环境安装nginx,把这些记录下来总结经验. 一.安装环境 操作系统:CentOS release 6. ...

  4. centos系统编译安装nginx+php环境另加独立mysql教程

    以前看过的安装nginx+php环境都带了mysql数据库了,这个是因为很多站长都是nginx+php+mysql都在同一台服务器了,那么今天我们是单独处理了,一个是nginx+php环境,然后mys ...

  5. Mac OS使用brew安装Nginx、MySQL、PHP-FPM的LAMP开发环境

    准备工作 新版的 Mac OS 内置了Apache 和 PHP,我的系统版本是OS X 10.9.3,可以通过以下命令查看Apache和PHP的版本号: httpd -v Server version ...

  6. 手把手教你玩转nginx负载均衡(四)--源码安装nginx

    引言: 在上一篇,我们已经装好了虚拟机,并且已经配置好了网络,那么今天我们就要开始安装nginx服务器了. 安装工具以及过程 安装gcc编译套件以及nginx依赖模块 yum -y install g ...

  7. Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Mariadb 10.1.20 + Nginx 1.10.2 + PHP 7.1.0 + Laravel 5.3 )

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...

  8. 安装nginx

    [yum安装nginx] yum clean all(这步不执行会出现no more mirrors to try错误) cd /etc/yum.repos.d/ vi nginx.repo 填写 [ ...

  9. unbuntu14.04 安装nginx配置

    记录一下linux下安装nginx的所需要的配置. 首先从 nginx官网 下载所需要的版本,复制链接,执行 wget http://nginx.org/download/nginx-1.8.0.ta ...

  10. linux 安装 nginx 及反向代理配置

    Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,以下为Linux centos平台下安装nginx并配置反向代理的过程(采用源码安装的方式) 一:安装 ...

随机推荐

  1. numpy之填充为nan的数据为该列平均值

    # coding=utf-8 import numpy as np ''' 填充nan的数据,为该列的平均值 ''' def fill_ndarray(t1): for i in range(t1.s ...

  2. 内存数据库:Redis与Memcached的区别

    Redis与Memcached的区别 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都 ...

  3. Appium+python自动化2-环境搭建

    一.必备软件安装 小编的环境是Windows 7版本 64位系统(32位的同学自己想办法哦) 1.jdk1.6.0 (64位) 2.android-sdk_r24.3.4-windows 3.pyth ...

  4. [LeetCode] Top 100 Liked Questions

    [LeetCode] Top 100 Liked Questions # Title Acceptance Difficulty 1 Two Sum 38.80% Easy 2 Add Two Num ...

  5. Python:Django 项目中可用的各种装备和辅助

    1 Redis 数据库 2 MySQL 数据库 3 前端服务器 live-server 4 定时任务 django-crontab扩展 5 Docker 容器 --用来运行 FastDFS 分布式文件 ...

  6. 给Date的构造函数添加属性和方法

    let d = Date.prototype; Object.defineProperties(d, { 'year': { get: function () { return this.getFul ...

  7. LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  8. [转帖]微软公布2019 Q2财报 几大部门均实现增长

    微软公布2019 Q2财报 几大部门均实现增长 https://baijiahao.baidu.com/s?id=1624179330159140676&wfr=spider&for= ...

  9. Luogu P2569 [SCOI2010] 股票交易

    此题链接到dp常见优化方法 开始的时候被纪念品误导,以为是多支股票,后来发现事情不妙: 这道题知道的是某一只股票的走势: \(Solution\): \(70pts\): 设\(f[i][j]\)表示 ...

  10. 线性基求交(线段树)--牛客第四场(xor)

    题意: 给你n个基,q个询问,每个询问问你能不能 l~r 的所有基都能表示 x . 思路: 建一颗线性基的线段树,up就是求交的过程,按照线段树区间查询的方法进行check就可以了. #define ...