Nginx安装

2016年7月15日 发表评论 阅读评论

nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息。

正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好。

ububtu平台编译环境可以使用以下指令

centos平台编译环境使用如下指令

安装make:

安装g++:

下面正式开始
---------------------------------------------------------------------------
一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。
1.选定源码目录
可以是任何目录,本文选定的是/usr/local/src

2.安装PCRE库
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:

3.安装zlib库
http://zlib.net/zlib-1.2.8.tar.gz 下载最新的 zlib 源码包,使用下面命令下载编译和安装 zlib包:

4.安装ssl(某些vps默认没装ssl)

5.安装nginx

Nginx 一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择这两个版本的其中一个,下面是把 Nginx 安装到 /usr/local/nginx 目录下的详细步骤:

--with-pcre=/usr/src/pcre-8.34 指的是pcre-8.34 的源码路径。
--with-zlib=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径。

安装成功后 /usr/local/nginx 目录下如下

6.启动
确保系统的 80 端口没被其他程序占用,运行/usr/local/nginx/nginx 命令来启动 Nginx,

如果查不到结果后执行,有结果则忽略此步骤(ubuntu下必须用sudo启动,不然只能在前台运行)

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

-----------------------------------------------------
到这里nginx就安装完成了,如果只是处理静态html就不用继续安装了

如果你需要处理php脚本的话,还需要安装php-fpm

下面安装排错

附:可能遇到的错误和一些帮助信息

1.1编译pcre错误

解决办法:安装g++,别忘了重新configure

1.2 make出错

按照第4步的安装方法或
ubuntu下

centos下

2.nginx编译选项

make是用来编译的,它从Makefile中读取指令,然后编译。

make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。nginx的configure命令支持以下参数:

  • --prefix=path    定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx。
  • --sbin-path=path 设置nginx的可执行文件的路径,默认为  prefix/sbin/nginx.
  • --conf-path=path  设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf.
  • --pid-path=path  设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为prefix/logs/nginx.pid.
  • --error-log-path=path 设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认情况下,文件名 为prefix/logs/error.log.
  • --http-log-path=path  设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认情况下,文件名 为prefix/logs/access.log.
  • --user=name  设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody。
  • --group=name  设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户。
  • --with-select_module --without-select_module 启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
  • --with-poll_module --without-poll_module 启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
  • --without-http_gzip_module — 不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库。
  • --without-http_rewrite_module  不编译重写模块。编译并运行此模块需要PCRE库支持。
  • --without-http_proxy_module — 不编译http_proxy模块。
  • --with-http_ssl_module — 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。
  • --with-pcre=path — 设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。
  • --with-pcre-jit —编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。
  • --with-zlib=path —设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模块需要使用zlib 。
  • --with-cc-opt=parameters — 设置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时需要使用:--with-cc-opt="-I /usr/local/include。.如需要需要增加 select()支持的文件数量:--with-cc-opt="-D FD_SETSIZE=2048".
  • --with-ld-opt=parameters —设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:--with-ld-opt="-L /usr/local/lib".

典型实例(下面为了展示需要写在多行,执行时内容需要在同一行)

  1. 鸡翅
    2017年10月27日14:23 | #1

    @肖蜀黍
    yum 安装的指令是什么?

  2. 肖蜀黍
    2017年10月17日11:48 | #2

    @好坑的教程!!!
    是的,yum一下就好了

  3. xxx
    2017年10月14日18:35 | #3
  4. 哈哈哈
    2017年10月12日01:13 | #4

    @好坑的教程!!!
    你也不看一下,多久的教程了,你的环境一样么?

  5. 好坑的教程!!!
    2017年10月9日14:30 | #5

    好坑的教程,照着装了半天不成功,问了下 一句yum ... 刷刷装完了···

  6. 吕长久
    2017年8月29日21:43 | #6

    @aaa
    我就可以用啊,你用前面的,不要带有openssl版本号,进去之后你再选哪个版本

  7. aaa
    2017年7月28日17:04 | #7

    @火鸟
    openssl 源码地址不对

  8. 火鸟
    2017年7月19日17:51 | #8

    make -f objs/Makefile
    make[1]: Entering directory /usr/local/src/nginx-1.10.2'
    cd /opt/app/openet/oetal1/chenhe/pcre-8.41 \
    && if [ -f Makefile ]; then make distclean; fi \
    && CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
    ./configure --disable-shared
    /bin/sh: line 0: cd: /opt/app/openet/oetal1/chenhe/pcre-8.41: 没有那个文件或目录
    make[1]: *** [/opt/app/openet/oetal1/chenhe/pcre-8.41/Makefile] 错误 1
    make[1]: Leaving directory
    /usr/local/src/nginx-1.10.2'
    make: *** [build] 错误 2

  9. 蚂蚁
    2017年7月12日15:57 | #9

    make -f objs/Makefile
    make[1]: Entering directory /usr/local/src/nginx-1.4.2'
    cd /usr/local/src/pcre-8.21 \
    && if [ -f Makefile ]; then make distclean; fi \
    && CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
    ./configure --disable-shared
    /bin/sh: line 0: cd: /usr/local/src/pcre-8.21: No such file or directory
    make[1]: *** [/usr/local/src/pcre-8.21/Makefile] Error 1
    make[1]: Leaving directory
    /usr/local/src/nginx-1.4.2'
    make: *** [build] Error 2
    我在第五步的时候出现这个问题请问这个需要怎么解决?

  10. 蚂蚁
    2017年7月12日15:55 | #10

    make -f objs/Makefile
    make[1]: Entering directory /usr/local/src/nginx-1.4.2'
    cd /usr/local/src/pcre-8.21 \
    && if [ -f Makefile ]; then make distclean; fi \
    && CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
    ./configure --disable-shared
    /bin/sh: line 0: cd: /usr/local/src/pcre-8.21: No such file or directory
    make[1]: *** [/usr/local/src/pcre-8.21/Makefile] Error 1
    make[1]: Leaving directory
    /usr/local/src/nginx-1.4.2'
    make: *** [build] Error 2

  11. 2017年6月21日10:29 | #11

    zlib下载地址已经变了,正确地址为:http://zlib.net/fossils/zlib-1.2.8.tar.gz

  12. mys
    2017年6月20日10:29 | #12

    [root@bogon nginx-1.12.0]# ./configure --prefix=/usr/local/src/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-stream \
    --with-http_v2_module \
    --with-pcre=/usr/local/src/pcre2-10.23 \
    --with-zlib=/usr/local/src/zlib-1.2.11 \
    --with-openssl=/usr/local/src/openssl-1.0.2l

    报这个错误咋解决一直没找到原因:
    ./configure: error: invalid option " "

  13. mys
    2017年6月20日10:25 | #13

    @mys

    这个错误是因为啥 一直没找到原因

  14. mys
    2017年6月20日10:25 | #14

    [root@bogon nginx-1.12.0]# ./configure --prefix=/usr/local/src/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-stream \ --with-http_v2_module \ --with-pcre=/usr/local/src/pcre2-10.23 \ --with-zlib=/usr/local/src/zlib-1.2.11 \ --with-openssl=/usr/local/src/openssl-1.0.2l

    ./configure: error: invalid option " "

  15. xx
    2017年6月16日15:23 | #15

    --with-http_stub_status_module #nginx状态
    --with-http_ssl_module #支持HTTPS
    --with-http_sub_module #支持URL重定向
    --with-pcre=/usr/include/pcre/ (启用正规表达式)
    --with-md5=/usr/lib #md5是一种加密算法
    --with-http_memcached_module (启用memcache缓存)
    --with-http_rewrite_module (启用支持url重写)
    这几个模块建议都装上去

  16. 2017年6月13日16:38 | #16

    @hyan
    su root

  17. 迷彩
    2017年1月5日18:36 | #17

    ./configure --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-pcre=/usr/local/src/pcre-8.38
    --with-zlib=/usr/local/src/zlib-1.2.10
    --with-openssl=/usr/local/src/openssl-1.0.1t

    • 迷彩
      2017年1月5日18:50 | #18

      这是我安装的文件目录配置!

  18. 2016年12月10日23:29 | #19

    你的问题2015年的了,我是刚刚安装的,安装pcre最新版pcre2-10.22, ,也是报错这个,装了pcre-8.39就没有问题

  19. 一木
    2016年12月7日16:58 | #20

    很不错啊,谢谢分享

  20. 2016年11月22日22:40 | #21

    不错,照着做完美编译!看其他人的老是各种错误

  21. 2016年11月10日10:01 | #22

    一直有想学习下nginx源码。啥时候出个源码解读呀?

  22. 白开水
    2016年10月25日14:20 | #23

    请问,nginx支持ftp转发吗

  23. 2016年7月22日13:38 | #24

    make: *** No rule to make target build', needed by default'. Stop.

  24. blueo666
    2016年5月8日21:48 | #26

    openssl 1.1 编译没法通过,换低版本才可以通过

  25. 古德
    2016年3月26日14:03 | #27

    ubuntu不是ububtu

  26. Damon
    2016年2月19日10:43 | #28

    gaoqi

  27. 2015年12月27日16:52 | #29

    楼主好,windows 服务器上用nginx来做代理服务器怎么样呢

  28. nin
    2015年12月23日13:59 | #30

    安装nginix 时,./configure: error: invalid option "--sbin-path" 什么原因?

  29. 大肥肉
    2015年12月23日11:06 | #31

    点赞

  30. 2015年12月5日23:39 | #32

    在安装nginx的时候,pcre的依赖和zlib的依赖,你直接指向了源码,那么是不是意味着zlib和pcre并不需要安装呢?

  31. 无名
    2015年11月22日21:47 | #33

    openssl 这个高版本就是不行,最后换了低版openssl-1.0.1p OK

  32. 2015年11月12日18:23 | #34

    编译安装和apt安装,配置的时候是不是有点不同?

  33. 2015年11月7日22:02 | #35

    网站做的好棒哦

  34. 2015年7月19日13:41 | #36

    晕晕

  35. 2015年6月20日10:29 | #37

    教程很好,支持下

  36. 2015年5月18日19:48 | #38

    安装时要不要添加nginx用户

  37. 2015年4月21日21:58 | #40

    执行./nginx -t 显示配置文件OK还有successful,就是打开浏览器访问本地ip地址是404 Not Found,而且很奇怪下面还写着nginx/1.6.3 这是怎么回事啊5555555~~明明我装的版本和楼主是一样的呀,好心塞。。求教。。

  38. 2015年4月19日15:06 | #44

    with-http_rewrite_module 这个有什么用处吗

  39. sufy
    2015年3月6日15:37 | #46

    我的tomcat端口设置的是8081然后也启动了,但是按照nginx后,访问主机ip,出现无法显示该网页

  40. 逃之夭夭
    2015年3月4日16:52 | #47

    编译错了src/core/ngx_regex.h:15:18: 致命错误: pcre.h:没有那个文件或目录
    编译中断。
    make : *** [objs/src/core/nginx.o] 错误 1
    make :正在离开目录 `/usr/local/src/nginx-1.7.9'
    make: *** [install] 错误 2

    • 2015年7月30日22:54 | #48

      原因是缺少pcre,需要安装libpcre

      ubuntu/debian:
      apt-get install libpcre3 libpcre3-dev

      centos/redhat:
      yum install pcre-devel

  41. 2015年2月22日22:57 | #49

    pcre能否用pcre2替代?(我看到pcre官网上说今后只对pcre进行漏洞修补)
    我用pcre2替代了pcre
    出现了错误:src/core/ngx_regex.h:15:18: fatal error: pcre.h: No such file or directory
    #include <pcre.h>
    ^
    compilation terminated.
    make : *** [objs/src/core/nginx.o] Error 1
    make : Leaving directory `/usr/local/src/nginx-1.7.10'
    make: *** [build] Error 2
    怎么解决?

    • 2015年2月22日23:01 | #50

      最好跟官网一致

    • gigi
      2015年7月19日11:54 | #51

      我也出现 了这个问题,改回用pcre就能通过,没用pcre2

    • 2015年7月30日22:51 | #52

      原因是缺少pcre,需要安装libpcre

      ubuntu/debian:
      apt-get install libpcre3 libpcre3-dev

      centos/redhat:
      yum install pcre-devel

  42. 2014年12月23日12:05 | #53

    mark

  43. 2014年12月4日11:40 | #54

    3ks ~ 很不错呦~

  44. Hans
    2014年10月8日16:48 | #55

    Windows下咋整?

  45. 2014年6月13日21:32 | #56

    php-fpm 最后安装的时候,报错。
    make:***没有规则可以创建目标“all”,停止。

  46. 2014年6月10日11:34 | #57

    我用虚拟机安装好,一切正常,主机上:telnet 192.168.59.128 80不能访问,就是不能用主机通过ip访问,然后我搜索了下,解决了,原来是centos有防火墙的原因,要关闭。(1)/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT (2)/etc/init.d/iptables save (3)/etc/init.d/iptables restart

  47. tony
    2014年6月7日22:19 | #59

    已通过rpm安装zlib 和pcre, 还需要指定--with-pcre= --with-zlib=吗,如需要如何定义呢

    • 2014年6月7日22:30 | #60

      如果安装的没问题,可以不用指定路径

      • tony
        2014年6月7日22:42 | #61

        多谢,楼主好人呀,能加你Q吗,方便交流请教,My Q378064127

  48. s
    2014年6月2日10:29 | #62

    sss

  49. 2014年4月16日15:34 | #63

    我安装失败了,
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

  50. 2014年4月8日17:50 | #66

    rrrrrrrrrr

  51. 2014年3月6日12:03 | #67

    写有用的东西,要比高深的东西更令人喜欢呀~!

  52. 2014年2月26日16:00 | #68

    晚上也试试

  53. 2014年2月24日17:25 | #69

    当初 v 你好宿舍当成 v

  54. 2014年2月17日17:58 | #70

    这个没有sbin 如何查看配置文件是否对啊

    • 2014年2月19日10:26 | #71

      进入安装目录,找到可行性文件nginx ,执行./nginx -t

  55. xinda
    2014年1月16日13:08 | #72

    很不错的安装教程
    不过,有个建议,就是configure中的 *-path这些参数还是用默认值会比较好,这样安装后的目录更清晰
    要不然配置文件、启动脚本都在同一目录,很乱,不利于维护

    • 2014年1月16日17:34 | #73

      如果想用默认的路径,把*-path删掉就好了,放在一起考虑的是升级,删除方便。

      • 2014年7月25日10:59 | #74

        楼主,能够加下qq吗?方便咨询问题,谢谢!
        QQ:522480647

  56. 余芦煌
    2013年12月21日13:03 | #75

    谢谢

  57. 2013年11月19日14:40 | #76

    好,很好,写的很详细的nginx启动步骤。

  58. 2013年11月17日13:34 | #77

    --with-pcre=/usr/src/pcre-8.21 指的是pcre-8.21 的源码路径。
    --with-zlib=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径。
    这里折腾我很久

  59. anne
    2013年11月13日19:54 | #80

    楼主真好人 资料好全 感谢!!!

  60. 2013年11月12日15:03 | #81

    这是我见到写得最好的了

  61. 阿f
    2013年11月7日09:20 | #82

    网页无法显示图片,403错误

  62. yelin
    2013年11月2日16:40 | #85

    不错

  63. ryan
    2013年8月9日21:41 | #86

    好稳扎个,呵呵,一目了然

  64. fish
    2013年7月5日11:09 | #87

    安装完成后如何启动啊?

    • bigfish
      2013年10月28日14:36 | #88

      6.启动
      确保系统的 80 端口没被其他程序占用,运行/usr/local/nginx/nginx 命令来启动 Nginx,

  65. 2013年6月19日10:55 | #89

    good

  66. 2013年6月19日10:47 | #90

    good

  67. 2013年6月4日18:43 | #91

    这个安装完后nginx没有指定用户要制定nginx的用户建立这个用户,在下一步安装phpfpm的时候用户会报错

  68. jack20039
    2013年5月21日20:30 | #92

    第四步执行后,(假设例子是正确的)
    继续step 5,
    invalid option: --with-http_ssl_module
    所以把这句抛弃,重新再来:

    gcc: /libz.a: No such file or directory
    make : *** [objs/nginx] Error 1
    make : Leaving directory `/usr/local/src/nginx-1.2.8'
    make: *** [build] Error 2

    • j.a.ck
      2013年5月21日20:30 | #93

      I just don't know why..

      • 2013年5月21日22:33 | #94

        应该是续行符导致的,在zlib-1.2.8后面放了一个空格,这样导致没有去zlib的安装目录去查找libz.a

        • j.a.ck
          2013年5月23日13:51 | #95

          咩哈哈,我没有多个空格,所以我把backslash去掉了,就成功了

      • 2013年5月23日13:08 | #96

        我遇到这情况的,就是选项后面的空格导致。

    • 2013年5月21日22:25 | #98

      你是不是centos 5.3 如果是的话用这个重新congifugre,然后在编译

      ./configure --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-pcre=/usr/local/src/pcre-8.21 --with-zlib=/usr/local/src/zlib-1.2.8 --with-openssl=/usr/local/src/openssl-1.0.1c
      make
      make install

      低版本的centos好像不支持''续航

  69. 2013年5月16日14:54 | #99

  70. 2013年4月28日14:41 | #100

    新手请注意防火墙 添加iptables -I INPUT -p tcp --dport 80 -j ACCEPT

  71. 2013年4月10日21:17 | #102

    我用的8.31也正常安装啊

  72. Dino
    2013年1月28日07:32 | #104

    请问有nginx+twiki的安装方法吗?网上好要没有这样子的设定

  73. zteye@163.com
    2013年1月23日23:30 | #105

    谁能分享下aix系统安装nginx的宝贵经验啊,我搜遍全网都没有成功安装的案例。

  74. 小刀
    2013年1月10日18:16 | #106

    --with-pcre=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径--笔误

  75. 2012年12月23日19:05 | #108

    呵呵 更新的好快 中午的问题 晚上就更新了

  76. jay61439476
    2012年12月19日11:58 | #110

    centos报错:error: SSL modules require the OpenSSL library. 下载了openssl的代码 加上--with-openssl=/usr/local/src/openssl-1.0.1c 就OK了

  77. 2012年11月2日13:44 | #111

    安装过程中,使用pcre库的最新版本8.31会报错,换用8.21版本正常。测试过nginx-1.2.3 nginx-1.2.4