但行好事
莫论前程❤

Nginx学习小记

Web服务器也称为www服务器,HTTP服务器,其主要功能是提供网上信息浏览服务.

Unix和linux平台下的常用web服务器有Apache,Nginx,Lighttpd,Tomcat等.使用最广泛的是Apache.

  • Apache仍然是世界上应用最多的服务器.
  • Tomcat是一个开放源代码.运行servlet和JSP Web应用软件的基于Java的Web应用软件容器.Tomcat Server是根据servlet和JSP规范运行的.它比绝大多数商业应用软件服务器要好用.但是Tomcat对静态文件,高并发的处理比较弱.
  • Nginx是俄罗斯人伊戈尔·塞索耶夫编写的一款高性能的HTTP服务器和反向代理服务器.在高并发的情况下,Nginx是Apache服务器不错的替代品.它能够支持高达50000多个并发连接数的响应(实际生产环境中能支持2万到4万的并发连接数).而内存、CPU等系统资源消耗却非常低.运行非常稳定,成本低.配置文件简单.支持热部署.

安装前准备

编译Nginx的要求如下:

​ 磁盘空间保证10M以上.

​ GCC编译器及相关工具:您必须保证您的系统中安装有GCC编译器,因为Nginx是C语言写的.另外您还必须安装Autoconf和Automake工具.它们用于自动创建功能完善的Makefile.当前大多数软件包都是用这一工具生成Makefile的.Nginx也不例外.

在CentOS系统下使用yum安装.

yum -y install gcc gcc-c++ autoconf automake 

模块依赖性:

​ Nginx的一些模块需要其他第三方库的支持,例如gzip需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库等.

yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 

下载

官方网站:该网站的以下三行内容提供了Nginx 0.6.x, 0.7.x, 0.8.x三个版本分支的源码包或windows二进制文件下载.

http://www.nginx.net/

其开源源码主要分为三种:

  • 主线版本 “Mainline version”,也称为主干版或开发板,主线版本是最新版本,但不稳定
  • 稳定版本 “Stable version”
  • 历史版本 “Legacy version”

源码安装

Nginx在linux系统上的安装命令如下:

# wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar -zxvf nginx-0.x.xx.tar.gz
cd nginx-0.x.xx
# ./configure 
# make 
# sudo make install 

文件目录如下:

total 752
drwxr-xr-x 6 1001 1001   4096 Jan 12 20:41 auto
-rw-r--r-- 1 1001 1001 288742 Dec  4 22:52 CHANGES
-rw-r--r-- 1 1001 1001 440121 Dec  4 22:52 CHANGES.ru
drwxr-xr-x 2 1001 1001   4096 Jan 13 12:45 conf
-rwxr-xr-x 1 1001 1001   2502 Dec  4 22:52 configure
drwxr-xr-x 4 1001 1001   4096 Jan 12 20:41 contrib
drwxr-xr-x 2 1001 1001   4096 Jan 12 20:41 html
-rw-r--r-- 1 1001 1001   1397 Dec  4 22:52 LICENSE
drwxr-xr-x 2 1001 1001   4096 Jan 12 20:41 man
-rw-r--r-- 1 1001 1001     49 Dec  4 22:52 README
drwxr-xr-x 9 1001 1001   4096 Jan 12 20:41 src

与编译其他软件一样.我们需要使用此目录下的configure脚本文件,进行一些编译安装的相关设置,changes文件说明了该版本修改了哪些bug,新增了哪些功能等等.changes.ru是俄语版.conf文件夹下的文件是一些nginx配置文件的模板文件.编译安装时这些文件最终会被拷贝到安装目录中,html目录中的文件是一些静态页面的模板文件,src目录是源代码目录.man目录是帮助文档目录,contrib目录中的文件可以帮助我们在使用vim编辑nginx配置文件时提供语法高亮功能.

按照上面的操作,Nginx将被安装在/usr/local/nginx目录下.您可以通过./configure -help命令查看Nginx可选择的编译选项.

./configure \
  --prefix=/usr \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre

执行./configure --help可以看见许多选项信息,使用--prefix选项可以指定nginx编译安装的目录,除了一些常见的目录设置选项,你应该还会看到好多类似”–with-XXX_module” 或”without-XXX_module”的选项.Nginx是高度模块化的,每个模块就代表一个功能,而且刚才也提到过,只有编译安装的方式才能指定安装哪些模块.

可以理解为

​ “—-with-XXX_module”选项表示安装对应的模块,

​ “—-without-XXX_module”选项表示指明不安装对应的模块.

以上能够自主选择的为可选模块.除了这些可选模块,还有标准模块是不可以自主选择的.

./configure \
  # Nginx安装路径,默认/usr/local/nginx
  --prefix=/usr \           
  # nginx可执行文件安装路径.只能安装时指定,默认<prefix>/sbin/nginx
  --sbin-path=/usr/sbin/nginx \ 
  # 在没有给定-c选项下默认的nginx.conf的路径.默认<prefix>/conf/nginx.con
  --conf-path=/etc/nginx/nginx.conf \
  # 默认 <prefix>/logs/error.log
  --error-log-path=/var/log/nginx/error.log \
  # 默认 <prefix>/logs/access.log
  --http-log-path=/var/log/nginx/access.log \
  # 默认 <prefix>/logs/nginx.pid
  --pid-path=/var/run/nginx/nginx.pid  \
  # nginx.lock文件的路径
  --lock-path=/var/lock/nginx.lock \
  # 在nginx.conf中没有指定user指令的情况下.默认的nginx使用的用户,默认nobody
  --user=nginx \
  # 在nginx.conf中没有指定user指令的情况下.默认的nginx使用的组,默认nobody
  --group=nginx \
  # 开启HTTP ssl模块,使nginx可以支持https请求,这个模块需要已经安装OPENSSL. debian系统上是libssl.
  --with-http_ssl_module \
  # 启用ngx_http_flv_module
  --with-http_flv_module \
  # 启用 "server status" 页 
  --with-http_stub_status_module \
  # 启用 ngx_http_gzip_module 如果启用需要zlib库.
  --with-http_gzip_static_module \
  # 指定http客户端请求缓存文件存放目录的路径
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  # 指定http反向代理缓存文件存放目录的路径
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  # 指定http FastCGI缓存文件存放目录的路径
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  # 指定PCRE库的源代码的路径
  --with-pcre

使用yum源安装

找到对应的yum源

http://nginx.org/en/linux_packages.html 

配置过程如下:

  • 创建nginx的yum源文件

/etc/yum.repos.d/nginx.repo,内容如下:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
  • 安装
yum install -y nginx

nginx.conf文件vim高亮

# 进入源码包解压目录
cd nginx-x.xx/
# 将相应的语法文件拷贝到对应的目录中,
cp -r contrib/vim/*  /usr/share/vim/vimfiles/

将nginx编译安装完之后查看文件目录结构如下:

total 20
drwxr-xr-x 2 root root 4096 Jan 17 20:26 conf
drwxr-xr-x 2 root root 4096 Jan 17 18:32 html
drwxr-xr-x 2 root root 4096 Jan 17 18:32 logs
drwxr-xr-x 2 root root 4096 Jan 17 18:32 modules
drwxr-xr-x 2 root root 4096 Jan 17 18:32 sbin
  • conf 存放nginx的相关配置文件
  • html目录是默认提供的web服务的”根目录”
  • logs是日志存放目录
  • modules存放了一些模块会用到的库
  • sbin目录中存放了nginx的二进制文件,我们需要使用nginx的二进制文件来启动nginx

命令如下:

# 启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

通过yum源安装的nginx,对应的二进制执行文件会自动拷贝到/usr/sbin/文件夹下.而此目录默认已经加入到环境变量中,所以我们可以在任意目录直接执行”nginx”命令启动nginx

编译安装后,nginx相关配置文件存放在如下路径中

nginx安装路径/conf/

而通过yum安装的nginx,相关的配置文件存放在如下路径中

/etc/nginx

默认情况下 nginx.conf文件带有很多的注释,删除注释

sed -i '/^[[:space:]]*#/'d nginx.conf

删除完所有的注释之后剩余的部分如下:

worker_processes 1;

events{
    worker_connections 1024;
}

http{
    include mime.types;
    default_type application/octet-stream;

    sendfile on;

    keeplive_timeout 65;

    server{
        listen 80;
        server_name localhost;

        location / {
            root html;
            index index.html index.htm;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html{
            root html;
        }
    }
}

先看一下基础语法:

http {
    ...
    ...

    server {
        ...
        ...

        location ... {
                ...
                ...
        }

    }

    server {
        ...
        ...
    }

}

从上述语法配置示例可以看出,上述示例可以分为几个逻辑部分:

  • http部分 http模块
  • server部分 server模块
  • location部分 location模块

每个配置块用{}作为分界线.从缩进可以看出它们是有层级关系的,http中可以配置多个server,一个server中可以配置多个location,我们知道nginx最基础的功能就是提供http服务,所以跟http有关的公共配置,可以放置在http模块中.我们可以在一台nginx主机上同时提供多个web服务.

​ 每一个server就代表一个http服务,我们可以同时配置多个server.以便同时提供多个http服务.

​ 一个server中可以有多个location.location是什么意思呢?当我们访问一个网络上的资源的时候,都是通过url访问的,你可以把location当做url的一部分.此处.我们使用如下url作为示例:

https://www.liupeng.mobi/archives/1591'

上述的”/archives”就是一个location

举例说明一下:

当我们访问https://www.liupeng.mobi/的时候默认会访问到nginx服务器上的/usr/local/nginx/html/index.html文件.

之所以会这样是因为如下配置:

location / {
    root html;
    index index.html index.htm;
}

刚才说过location可以理解为url的一部分,当我们访问https://www.liupeng.mobi/的时候,这个url的最后一个/就是location /中的/.

这个location块中有两条配置指令,它们分别是root和index,

  • root配置指令的意思是:当前location所对应的文档根目录是哪些,root html:代表当前location的文档根目录是html目录.
  • index配置指令的意思是:当没有指明任何资源时,默认访问的资源.

基础命令汇总

  • 设置nginx命令的全局变量
# 1、创建/etc/profile.d/nginx.sh文件,以便写入环境变量配置。
 
# 2、在/etc/profile.d/nginx.sh文件中写入如下内容:
nginx_home=/srv/nginx
PATH=$nginx_home/sbin:$PATH
export PATH

也可以直接在/etc/profile或者~/bashrc文件中直接添加

nginx_home=/srv/nginx
export PATH=$nginx_home/sbin:$PATH

最后使其生效

# 3、使用如下命令重载刚才的配置
source /etc/profile

不加任何参数直接运行nginx是启动nginx服务.

  • -h : 帮助信息
  • -v : 查看版本号
  • -V : 查看当前编译信息
  • -c : 指定使用哪个配置文件来启动nginx服务.
  • -t 或者 -T : 可以测试nginx.conf配置文件是否存在语法错误. -T会将文件内容输出到屏幕上.

如果没有错误则会提示如下信息:

# nginx -t
nginx: the configuration file /srv/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /srv/nginx/conf/nginx.conf test is successful
  • -s : 向正在运行的nginx主进程发送信号.信号的可用值有stop.quit.reopen,reload.
  • 停止nginx
ps -ef | grep nginx

# 我们可以通过如下方式进行平滑重启.
kill -信号类型 `/usr/local/webserver/nginx/logs/nginx.pid`
#等价于
kill -信号类型 主进程号

# 1. 从容停止nginx
kill -quit nginx 主进程号

# 2. 快速停止nginx
kill -TERM nginx主进程号
kill -int nginx主进程号

# 3. 强制停止所有Nginx进程
pkill -9 nginx

# 4. 平滑重启 (先检查新配置, 可用重启,不可用依旧使用旧配置)
kill -HUP nginx主进程号 

Nginx的信号控制

  • TERM,INT 快速关闭
  • QUIT 从容关闭
  • HUP 平滑重启.重新加载配置文件
  • USR1 重新打开日志文件,在切割文件时用处较大.
  • USR2 平滑升级可执行程序.
  • WINCH 从容关闭工作进程.
赞(1) 打赏
未经允许不得转载:刘鹏博客 » Nginx学习小记
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏