文档章节

[Nginx]使用源码编译安装Nginx服务器

王永濤
 王永濤
发布于 2016/02/01 21:28
字数 1696
阅读 660
收藏 8

Compiling and Installing From the Sources

Update 2016/01/28: Updated for nginx-1.8.1 And openssl-1.0.2e.

最近使用源码安装Nginx,遇到了一些问题,特此记录下来。

1 安装前准备:

检测系统版本:

$ uname -rms
Darwin 15.3.0 x86_64

检测GCC版本:

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix

创建安装目录:

为了方便管理,在/usr/local/下新建一个目录webserver,以后所有的软件安装都加 —prefix=/usr/loca/webserver,都会安装到这个目录下:

$sudo mkdir webserver
$pwd
/usr/local/webserver

2 安装nginx的依赖库

安装pcre:

the PCRE library – required by NGINX Core and Rewrite modules and provides support for regular expressions:

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.bz2
tar jxvf pcre-8.38.tar.bz2
cd pcre-8.38
./configure --prefix=/usr/local/pcre-8.38
make
make test
sudo make install

./configure --prefix=/usr/local/pcre-8.38 --with-openssl=../openssl-1.0.2e

安装zlib:

the zlib library – required by NGINX Gzip module for headers compression:

wget http://zlib.net/zlib-1.2.8.tar.gz
tar zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --prefix=/usr/local/zlib
make
make test

安装openssl:

the OpenSSL library – required by NGINX SSL modules to support the HTTPS protocol:

$ wget http://www.openssl.org/source/openssl-1.0.2e.tar.gz
$ tar -zxf openssl-1.0.2e.tar.gz
$ cd openssl-1.0.2e
$ ./Configure darwin64-x86_64-cc --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
$ make
$ sudo make install

查看OpenSSL支持的平台列表: $./Configure LIST

注意: If configuring for 64-bit OS X, then use a command similar to: $./Configure darwin64-x86_64-cc shared enable-ec_nistp_64_gcc_128 no-ssl2 no-ssl3 no-comp --openssldir=/usr/local/ssl/macos-x86_64 $make depend $sudo make install

If configuring for 32-bit OS X, then use a command similar to: ./Configure darwin-i386-cc shared no-ssl2 no-ssl3 no-comp --openssldir=/usr/local/ssl/macosx-i386 $make depend $sudo make install

3 安装Nginx

下载并安装Nginx:

$ wget http://nginx.org/download/nginx-1.8.1.tar.gz
$ tar zxf nginx-1.8.1.tar.gz
$ export KERNEL_BITS=64
$./configure --prefix=/usr/local/nginx \
    --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/nginx.conf \
    --pid-path=/usr/local/nginx/nginx.pid \
    --with-http_ssl_module \
    --with-openssl=../openssl-1.0.2e \
    --with-pcre=../pcre-8.38 \
    --with-zlib=../zlib-1.2.8

参数说明:

--sbin-path=path — 设置可执行文件名. 默认是:prefix/sbin/nginx. --conf-path=path — 设置配置文件名(nginx.conf). 默认是:prefix/conf/nginx.conf. --pid-path=path — 设置存放进程ID的nginx.pid文件名.默认是:prefix/logs/nginx.pid. --with-http_ssl_module 支持https协议,依赖OpenSSL库. --with-pcre=path 设置PCRE库路径,正则表达式.

4 启动Nginx:

查看版本:

$ /usr/local/nginx/nginx -v
nginx version: nginx/1.8.1

执行启动命令:

$ sudo /usr/local/nginx/nginx

浏览器查看:

打开浏览器输入:http://127.0.0.1/ 可以看到:"Welcome to nginx! " 页面

命令查看:

$ curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Mon, 01 Feb 2016 12:29:30 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 01 Feb 2016 10:25:21 GMT
Connection: keep-alive
ETag: "56af3291-264"
Accept-Ranges: bytes

5 修改配置并重启服务:

配置文件路径:

/usr/local/nginx/nginx.conf

修改根目录:

默认的项目根目录:
默认的是html目录,即/usr/local/nginx/html/
location / {
    root   html;
    index  index.html index.htm;
}

修改项目根目录:
location / {
    root   /Users/WangTom/workspace/webroot/;
    index  index.html index.htm;
}

重新启动Nginx:

// 测试配置文件
$ sudo /usr/local/nginx/nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
//重新加载配置文件
$ sudo /usr/local/nginx/nginx -s reload

附:问题与解决

常见错误:

报错1: 没有指定 OpenSSL 库.

内容:

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

分析: 启用with-http_ssl_module模块,但没有启用openssl, 启用的SSL模块需要依赖openssl库 解决: configure时增加参数 [with-openssl=../openssl-1.0.2e].

报错2: 参数配置路径出错

参数with-pcre,如果指定的是with-pcre=/usr/local/pcre-8.38,则执行 make 时会报错:

/Applications/Xcode.app/Contents/Developer/usr/bin/make -f objs/Makefile
cd /usr/local/pcre-8.38 \
    && if [ -f Makefile ]; then /Applications/Xcode.app/Contents/Developer/usr/bin/make distclean; fi \
    && CC="cc" CFLAGS="-O2 -pipe " \
    ./configure --disable-shared
/bin/sh: ./configure: No such file or directory
make[1]: *** [/usr/local/pcre-8.38/Makefile] Error 127
make: *** [build] Error 2

分析: set path to PCRE library sources, 注意是PCRE的源代码的路径,不是编译安装后的路径

查看配置帮助:
$  ./configure --help | grep 'pcre'
  --without-pcre                     disable PCRE library usage
  --with-pcre                        force PCRE library usage
  --with-pcre=DIR                    set path to PCRE library sources
  --with-pcre-opt=OPTIONS            set additional build options for PCRE
  --with-pcre-jit                    build PCRE with JIT compilation support

注意是 PCRE library sources, 是PCRE的源代码。 直接去官网下载PCRE, 解压至与 nginx-1.8.1 平级的目录中

解决: 将PCRE路径指定为源代码的路径,比如:with-pcre=/softwares/pcre-8.38

报错3 : $ sudo ./config --prefix=/usr/local/openssl Operating system: i686-apple-darwinDarwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 WARNING! If you wish to build 64-bit library, then you have to invoke './Configure darwin64-x86_64-cc' manually. You have about 5 seconds to press Ctrl-C to abort.

解决: 配置命令使用 Configure, 而不是config, 加参数平台参数:darwin64-x86_64-cc $ sudo ./Configure darwin64-x86_64-cc --prefix=/usr/local/openssl 备注: 查看支持的平台列表:$./Configure LIST

报错4:

Undefined symbols for architecture x86_64:
  "_SSL_CTX_set_alpn_select_cb", referenced from:
      _ngx_http_ssl_merge_srv_conf in ngx_http_ssl_module.o
  "_SSL_CTX_set_next_protos_advertised_cb", referenced from:
      _ngx_http_ssl_merge_srv_conf in ngx_http_ssl_module.o
  "_SSL_select_next_proto", referenced from:
      _ngx_http_ssl_alpn_select in ngx_http_ssl_module.o
  "_X509_check_host", referenced from:
      _ngx_ssl_check_host in ngx_event_openssl.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [objs/nginx] Error 1
make: *** [build] Error 2

分析: 这个报错在网上有好多种原因造成的,因此也有许多的解决办的 解决: (1)将openssl-1.0.2e目录中, 文件Makefile中的[darwin-i386-cc]全部替换成[darwin64-x86_64-cc] (2)检测自己的系统是以32位模式运行,还是以64位模式运行:

(3)要为当前启动磁盘选择 64 位内核,请在“终端”中使用下列命令:sudo systemsetup -setkernelbootarchitecture x86_64

// 但是设置没有生效:
$ sudo systemsetup -setkernelbootarchitecture x86_64
Password:
setting kernel architecture to: x86_64
changes to kernel architecture failed to save!

(4) 执行配置NGINX命令前,增加 export KERNEL_BITS=64 命令,指定系统的运行模式为64位的。

报错5: 重启NGIXN报错: 内容:

nginx: [error] open() "/usr/local/nginx/nginx.pid" failed (2: No such file or directory)

分析: 解决:使用nginx -c的参数指定nginx.conf文件的位置:
/usr/local/nginx/nginx -c /usr/local/nginx/nginx.conf

注意这里的nginx路径,在编译时有指定,可能像网上的有些不同,默认应该是:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

检测配置文件是否正确:  (出错了,没有找到nginx.conf文件)
$ sudo /usr/local/nginx/nginx -t
nginx: [emerg] open() "/usr/local/nginx/nginx.conf" failed (2: No such file or directory)
nginx: configuration file /usr/local/nginx/nginx.conf test failed

复制配置文件:(复制一份)
$sudo cp nginx.conf.default nginx.conf

再次检测: (OK)
$ sudo /usr/local/nginx/nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
$ arch
i386
$ uname -a
Darwin MacWang.local 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
$ ioreg -l -p IODeviceTree | grep "firmware-abi" | sed -e 's/[^0-9A-Z]//g'
EFI64

参考:

http://nginx.org/en/docs/configure.html
https://www.nginx.com/resources/admin-guide/installing-nginx-open-source/
http://segmentfault.com/a/1190000003822041?_ea=392297
http://lists.apple.com/archives/macnetworkprog/2015/Jun/msg00025.html
http://www.iyunv.com/thread-18789-1-1.html
https://wiki.openssl.org/index.php/Compilation_and_Installation#Mac
http://www.nooidea.com/2011/02/switch-mac-into-64-bit.html

© 著作权归作者所有

共有 人打赏支持
王永濤
粉丝 10
博文 58
码字总数 35978
作品 0
浦东
程序员
私信 提问
加载中

评论(2)

王永濤
王永濤

引用来自“dongql”的评论

您的【报错4:】解决了我的问题,非常感谢!!!
客气客气~
dongql
dongql
您的【报错4:】解决了我的问题,非常感谢!!!
Nginx系列-1.Linux下安装Nginx

Nginx系列-1.Linux下安装Nginx 实验环境 一台最小化的 CentOS 7.3 虚拟机 A. 源码方式安装Nginx 一、安装Nginx 安装Nginx依赖包 从Nginx官网下载Nginx源码包 解压Nginx源码包到,并查看Nginx...

ngle
2018/06/08
0
0
CentOS6使用nginx搭建web网站服务

利用CentOS6搭建简易的web服务 github原址 centOS服务器 选购一台合适的云服务器,系统为centOS 在window系统下安装xshell和xftp, 保证可以系统访问centOS系统 使用xshell连接上云服务器,使...

HerryLo
2018/07/13
0
0
搭建nginx服务器

一、目的 1、在IP地址为192.168.4.102的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能: SSL加密功能 设置Nginx账户及组名称均为nginx 2、另外一台作为测试用的Lin...

bentian1208
2018/01/06
0
0
浅谈nginx安装

浅谈ngnix 编译安装 一,Nginx 简介 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(...

Erik8928
2017/07/12
0
0
Linux 编译安装Nginx

Linux编译安装nginx 背景: 学习nginx之前需要先会安装nginx,这里记录下如何编译安装nginx,为以后复习使用。 PS:没有特殊的需求,最好使用yum安装,yum安装需要配epel的yum源。 官方yum源地...

657188918
2017/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0
浅谈mybatis的日志适配模式

Java开发中经常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。有关适配器模式例子可以参考 设计...

算法之名
昨天
13
0
大数据教程(13.6)sqoop使用教程

上一章节,介绍了sqoop数据迁移工具安装以及简单导入实例的相关知识;本篇博客,博主将继续为小伙伴们分享sqoop的使用。 一、sqoop数据导入 (1)、导入关系表到HIVE ./sqoop import --connect...

em_aaron
昨天
3
0
Git cherry-pick 使用总结

应用背景:假设现在有两个分支:dev_01, dev_02. 如果我想把dev_01分支上的某几个commit合并到dev_02分支, 那么怎么办呢? 这就是cherry-pick的工作了。cherry-pick会捡选某些commit, 即把某...

天王盖地虎626
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部