您的位置:首页 > 运维架构 > Nginx

nginx 学习笔记(一)nginx 编译安装

2017-06-12 21:26 656 查看

准备工作

操作系统我这里使用的

CentOS release 6.5

Linux version 2.6.32

(1) GCC编译器

由于接下来要使用源码安装nginx,所以GCC编译器是必备的

可以通过

gcc -v


查看是否安装了gcc,如果没有安装,可以使用

yum install gcc


来安装

(2)PCRE库

如果在nginx.conf里使用了正则表达式,那么编译Nginx的时候就需要把PCRE库一起编译进Nginx,如果不需要的话可以不用安装

yum install pcre pcre-devel


(3)zlib库

zlib库用于Nginx将HTTP包的内容进行gzip格式压缩使用,如果在nginx.conf里配置了

gzip on


那么就必须安装zlib库

(4)OpenSSL开发库

如果需要支持SSL协议或者需要使用MD5、SHA1等散列函数,就需要安装OpenSSL库

yum install openssl openssl-devel


获取源代码

可以到 http://nginx.org/en/download.html 下载最新版或稳定版的Nginx



目前我这里稳定版是nginx-1.12.0,下载下来然后解压并进入到目录中

wget http://nginx.org/download/nginx-1.12.0.tar.gz && tar -zxvf nginx-1.12.0.tar.gz && cd nginx-1.12.0


编译安装

此时最简单安装方法是

./configure
make
make install


默认安装目录是/usr/local/nginx/,执行/usr/local/nginx/sbin/nginx即可启动Nginx,然后访问主机即可看到Nginx的欢迎界面



configure做了什么

可以看到可以执行configure来检测环境、生成Makefile等文件,进而使我们可以编译安装Nginx,configure支持的参数可以使用

./configure --help


查看,官方也提供了更具体的文档http://nginx.org/en/docs/configure.html

那么configure脚本具体做了些什么,可以通过打开configure文件来查看,我对configure脚本简单的分析注释了一下

#!/bin/sh

# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.

# 设置语言
LC_ALL=C
export LC_ALL

# 解析./configure时的参数命令并且设置一些变量
. auto/options

# 生成Makefile、ngx_modules.c等文件
. auto/init

# 分析src/中的源文件
. auto/sources

# 创建objs目录, ngx_modules.c等文件都在这里
test -d $NGX_OBJS || mkdir -p $NGX_OBJS

# 准备建立ngx_auto_headers.h和autoconf.err等文件
echo > $NGX_AUTO_HEADERS_H
echo > $NGX_AUTOCONF_ERR

# 写入命令行参数
echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H

# 判断是否开启了debug调试级别日志
if [ $NGX_DEBUG = YES ]; then
have=NGX_DEBUG . auto/have
fi

# 检查操作系统相关
if test -z "$NGX_PLATFORM"; then
echo "checking for OS"

NGX_SYSTEM=`uname -s 2>/dev/null`
NGX_RELEASE=`uname -r 2>/dev/null`
NGX_MACHINE=`uname -m 2>/dev/null`

echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"

NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";

case "$NGX_SYSTEM" in
MINGW32_*)
NGX_PLATFORM=win32
;;
esac

else
echo "building for $NGX_PLATFORM"
NGX_SYSTEM=$NGX_PLATFORM
fi

# 检查编译器相关
. auto/cc/conf

# 对非windows系统定义相关头文件
if [ "$NGX_PLATFORM" != win32 ]; then
. auto/headers
fi

# 检查操作系统和机器类型并定义一些特定方法
. auto/os/conf

# 对于非windows类unix系统,定义一些特定系统调用
if [ "$NGX_PLATFORM" != win32 ]; then
. auto/unix
fi

# 检查是否开启了--with-thread参数,并定义相关变量,windows不支持--with=thread
. auto/threads

# 生成ngx_modules.c文件
. auto/modules

# 检查第三方库,比如OpenSSL、zlib等
. auto/lib/conf

# 处理一些路径相关的变量
case ".$NGX_PREFIX" in
.)
NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}
have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
;;

.!)
NGX_PREFIX=
;;

*)
have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
;;
esac

if [ ".$NGX_CONF_PREFIX" != "." ]; then
have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define
fi

have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define

have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define
have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""
. auto/define
have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\""
. auto/define
have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\""
. auto/define

# 生成Makefile文件
. auto/make

# 加入第三方库
. auto/lib/make

# 加入make install
. auto/install

# STUB,增加两个宏,NGX_SUPERESS_WARN和NGX_SMP
. auto/stubs

# 设置nginx运行时的用户和用户组
have=NGX_USER value="\"$NGX_USER\"" . auto/define
have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define

# NGX_BUILD在auto/options中由--build参数设置,但具体没有被使用,应该是
a802
预留的内容吧
if [ ".$NGX_BUILD" != "." ]; then
have=NGX_BUILD value="\"$NGX_BUILD\"" . auto/define
fi

# 打印结果
. auto/summary


可以看到,configure在幕后做了很多事情才生成了objs这个目录,所以我们只要进入objs目录make及make install即可方便的安装Nginx

objs/

├── autoconf.err

├── Makefile

├── ngx_auto_config.h

├── ngx_auto_headers.h

├── ngx_modules.c

└── src

├── core

├── event

│ └── modules

├── http

│ ├── modules

│ │ └── perl

│ └── v2

├── mail

├── misc

├── os

│ ├── unix

│ └── win32

└── stream

nginx控制

nginx支持许多命令行控制,默认情况下我们可以使用

/usr/local/nginx/sbin/nginx -h


来查看,并且在官方文档中也会有更详细的介绍

http://nginx.org/en/docs/control.html

http://nginx.org/en/docs/events.html

参考文献

《深入理解Nginx:模块开发与架构解析》 陶辉 著

http://nginx.org/en/docs/configure.html

http://nginx.org/en/docs/control.html

http://nginx.org/en/docs/events.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx