码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx安装

时间:2015-01-06 07:21:35      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:linux   虚拟主机   俄罗斯   代理服务器   提供商   

什么是Nginx?


    Nginx是俄罗斯人开发的一款高性能的HTTP和反向代理服务器。Nginx能够选择高效的epoll(Linux 2.6内核)、kqueue(FreeBSD)、eventport(Solaris 10)作为网络I/O模型,在高并发的情况,能够很好的工作。


为什么选择Nginx?


    Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

  • 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

  • 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

  • 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

  • Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),支持热部署,Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。


安装Nginx


For Windows

    Nginx官方网站提供了Windows版本下载,Windows版本的Nginx使用比较简单,只须下载完成之后,将其解压缩到一个不包含空格、不含中文的路径中,然后执行 nginx.exe 即可。

For Linux

    对于Linux, Nginx提供了 Pre-Build 版本,可以直接下载使用。但是本文介绍直接从源码编译安装,包括具体的编译参数信息。

编译Nginx的要求如下:

  • gcc编译器以及相应的工具和开发库(gcc、g++、Autoconf、Automake等)

  • 模块依赖性:Nginx的一些模块需要其他第三方库的支持,gzip模块需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库等等。

实验环境:

  • CentOS 6.5 x86_64

  • nginx-1.7.9.tar.gz

OK, 下面正式开始

# 使用yum工具安装 gcc 编译器以及相关工具
[root@localhost ~]# yum -y install gcc gcc-c++ automake autoconf libtool make

# 使用yum工具安装模块依赖的库
# pcre, zlib, 前者为了支持重写rewrite, 后者为了支持gzip压缩
# ssl
[root@localhost ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

# ===============================
# 或者通过下载源码包编译安装这些库
# 安装pcre库,ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包 使用下面命令下载编译和安装 PCRE 包:
[root@localhost ~]# cd /usr/local/src
[root@localhost src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz
[root@localhost src]# tar xf pcre-8.34.tar.gz
[root@localhost pcre-8.34]# cd pcre-8.34
[root@localhost pcre-8.34]# ./configure
[root@localhost pcre-8.34]# make && make install

# 安装zlib库
# http://zlib.net/zlib-1.2.8.tar.gz 下载最新的 zlib 源码包,使用下面命令下载编译和安装 zlib包:
cd /usr/local/src
[root@localhost src]# wget http://zlib.net/zlib-1.2.8.tar.gz
[root@localhost src]# tar xf zlib-1.2.8.tar.gz
[root@localhost zlib-1.2.8]# cd zlib-1.2.8
[root@localhost zlib-1.2.8]# ./configure
[root@localhost zlib-1.2.8]# make && make install

# 安装ssl
cd /usr/local/src
[root@localhost src]# wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
[root@localhost src]# tar xf openssl-1.0.1c.tar.gz

正式安装Nginx

    前面都是为安装Nginx做准备,下面正式开始安装。Nginx一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择。

# 我这里是通过yum 安装的openssl, pcre,zlib等库,安装在默认的路径下,所以可以不指定库路径
# 添加用户和组
# groupadd nginx
# useradd -g nginx -s /sbin/nologin nginx

# cd /usr/local/src
# wget http://nginx.org/download/nginx-1.7.9.tar.gz
# tar xf nginx-1.7.9.tar.gz 
# cd nginx-1.7.9
# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx/lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --user=nginx --group=nginx

# make && make install

# 注意:如果是源码编译安装的第三方库, pcre, ssl, zlib等, 需要指定以下
--with-pcre=/usr/local/src/pcre-8.34         # 指的是pcre-8.34 的源码路径
--with-zlib=/usr/local/src/zlib-1.2.8        # 指的是zlib-1.2.7 的源码路径
--with-openssl=/usr/local/src/openssl-1.0.1c # 指的是openssl-1.0.1c 的源码路径

Nginx的启动、停止


Nginx的启动  

    我们把Nginx安装在 /usr/local/nginx 目录下,那么启动Nginx的命令就是

# /usr/local/nginx/sbin/nginx
# 可以使用参数 "-c" 指定配置文件的路径

# netstat -tulpn | grep 80
tcp        0      0 0.0.0.0:80       0.0.0.0:*        LISTEN      9131/nginx

    然后打开浏览器,访问此机器的IP,如果浏览器出现Welcome to nginx! 则表示Nginx已经安装,并且已经成功启动,提供服务。 当然,如果开启iptables防火墙,我们要打开80端口:

(1)/sbin/iptables  -I INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

(2)/etc/init.d/iptables save 

(3)/etc/init.d/iptables restart

技术分享

Nginx的停止      

    停止Nginx的方法有很多,通过发送系统信号给nginx主进程的方式来停止它。

# 从容停止nginx
# kill -QUIT 【Nginx主进程号】

# ` 字符是数字键盘 1 字符左边的那个字符,不需要 Shift,直接按 ` 字符即可。
# 如果在 nginx.conf 配置文件中指定了 pid 文件存放的路径,该文件中存放的就是 nginx 当前的主进程号。默认是放在 nginx 安装目录的 logs 目录下。
# kill -QUIT `/var/run/nginx/nginx.pid`

# 快速停止nginx
# kill -TERM 【Nginx主进程号】
# kill -TERM 【Nginx主进程号】

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

    网上有各种版本的Nginx开机自动启动脚本, 其实Nginx wiki网站已经有这个脚本(CentOS)http://wiki.nginx.org/RedHatNginxInitScript,稍做修改即可以用,在lnmp脚本已经运用。

Nginx开机自动启动脚本如下:

[root@localhost init.d]# cat nginx 
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse #               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /var/run/nginx.pid
  
# Source function library.
. /etc/rc.d/init.d/functions
  
# Source networking configuration.
. /etc/sysconfig/network
  
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
  
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
  
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  
lockfile=/var/lock/subsys/nginx
  
make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`
   if [ -z "`grep $user /etc/passwd`" ]; then
       useradd -M -s /bin/nologin $user
   fi
   options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
   for opt in $options; do
       if [ `echo $opt | grep ‘.*-temp-path‘` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
  
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
  
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
  
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
  
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
  
force_reload() {
    restart
}
  
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
  
rh_status() {
    status $prog
}
  
rh_status_q() {
    rh_status >/dev/null 2>&1
}
  
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

 OK, 到这里,Nginx的安装就算完成了,如果只是处理静态html页面,我们的工作就大功告成。如果还需要处理Php脚本,那么还需要安装 php-fpm。


附录


Nginx安装编译选项说明:

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

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

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

可以通过 ./configure --help 查看Nginx的编译选项。

  • --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".

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

./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=../pcre-4.4      --with-zlib=../zlib-1.1.3

安装过程中的常见错误

1、make 出错

make: *** No rule to make target `build‘, needed by `default‘.  Stop.
./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= option.

原因:缺少OpenSSL library

解决办法:

# yum -y install opensll openssl-devel


2、启动nginx报错

nginx: [emerg] getpwnam(“www”) failed 错误处理方法

原因: 启动nginx之前,需要添加nginx运行的用户和组

# groupadd nginx

# useradd -g nginx -s /sbin/nologin nginx


本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1599494

Nginx安装

标签:linux   虚拟主机   俄罗斯   代理服务器   提供商   

原文地址:http://skypegnu1.blog.51cto.com/8991766/1599494

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!