编译安装Nginx

会有一股神秘感。 提交于 2019-11-30 22:10:43

环境准备

  先安装准备环境

yum -y install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel

注释:

  gcc为GUN Compiler Collection的缩写,可以编译C和C++源代码等, 它是GUN开发的C和C++以及其它很多种语言的编译器(最早的时候只能编译C,后面很快进化成一个编译很多种语言的集合,如Fortran、Pascal、Objective-C、Java、Ada、Go等。)

  gcc在编译C++源代码的阶段,只能编译C++源文件,而不能自动和C++程序使用的库链接(编译过程分为编译、链接两个阶段,注意不要和可执行文件这个概念搞混,相对可执行文件来说有三个重要的概念:编译(compile)、链接(link)、加载(load)。源程序文件被编译成目标文件,多个目标文件连同库被连接成一个最终的可执行文件,可执行文件被加载到内存中运行)。因此,通常使用g++命令来完成C++程序的编译和连接,改程序会自动调用gcc实现编译。

  gcc-c++也能编译C源代码,只不过会把他当成C++源代码,后缀为.c的,gcc把他当做是C程序,而g++当做是c++程序;后缀为.cpp的,两者都会认为是C++程序,注意,虽然C++是C的超集,但是两者对语法的要求是有区别的。

  automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,automake还需用到Perl,犹豫automake创建的发布完全遵循GUN标准,所以在创建中不需要Perl。libtool是一款方便生成各种程序库的工具。

  pcre pcre-devel:在Nginx编译需要PCRE(Perl Compatible Regular Expression),因为Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。

  zlip zlib-devel:nginx启用压缩功能的时候,需要此模块的支持。

  openssl openssl-devel:开启SSL的时候需要此模块的支持。


安装Nginx

  操作命令如下:

 1 mkdir -p /home/vast/tools          --> -p 递归创建目录
 2 cd /home/vast/tools/               --> 跳转至/home/vast/tools目录
 3 wget -q http://nginx.org/download/nginx-1.16.0.tar.gz    -->下载Nginx软件包
 4 ls -l nginx-1.16.0.tar.gz
 5 useradd nginx -s /sbin/nologin -M                  -->创建Nginx用户
 6 tar zxvf nginx-1.16.0.tar.gz                       -->解压Nginx软件包
 7 cd nginx-1.16.0
 8 ./configure --user=nginx --group=nginx             -->进程用户或组权限
 9             --prefix=/application/nginx-1.16.0/    -->设置安装路径
10             --with-http_ssl_module                 -->激活ssl功能
11             --with-http_stub_status_module         -->激活状态信息
12 make && make install
13 ln -s /application/nginx-1.16.0/ /application/nginx
14  将Nginx安装路径通过软连接的方式更改为/application/nginx/,方便使用
15  安装时指定版本号路径为了便于查看区分当前使用的Nginx版本,方便升级
16  内部人员使用路径/application/nginx/。
17  当Nginx软件升级编译成带新版本号的版本后,删除原软链接,重新建立到/application/nginx/的软链接就好

安装完成后启动并检查安装结果:

  1、启动前检查配置文件语法

[root@miaopa ~]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.16.0//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.16.0//conf/nginx.conf test is successful

  2、启动nginx服务

/application/nginx/sbin/nginx

  1)查看Nginx服务对应的端口是否成功启动

1 [root@miaopa ~]# lsof -i :80
2 COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
3 nginx   10915  root    6u  IPv4  37219      0t0  TCP *:http (LISTEN)
4 nginx   10916 nginx    6u  IPv4  37219      0t0  TCP *:http (LISTEN)

  2)也可以使用通过netstat -lnt|grep 80 查看

[root@miaopa ~]# netstat -lnt|grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN 

  3、检查Nginx启动的实际效果

  1)在Linux下可使用如下wget命令检测

[root@miaopa ~]# wget 127.0.0.1
--2019-03-01 01:14:36--  http://127.0.0.1/
正在连接 127.0.0.1:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:612 [text/html]
正在保存至: “index.html”
100%[==========================================================================>] 612         --.-K/s   in 0s      
2019-03-01 01:14:36 (53.4 MB/s) - 已保存 “index.html” [612/612])

  2)也可以使用curl命令检测,如下:

[root@miaopa ~]# curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

将Nginx添加至service

  创建文件:/etc/init.d/nginx

vim /etc/init.d/nginx

  添加如下内容保存:

 #!/bin/bash
  #
  #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:  /etc/nginx/nginx.conf
  # config:  /etc/sysconfig/nginx
  # 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="/application/nginx/sbin/nginx"
  prog=$(basename $nginx)

  NGINX_CONF_FILE="/application/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:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
    if [ -n "$user" ]; then
  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
    fi
  }

  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|reload|configtest}"
  exit 2
  esac

  执行授权命令:

1 [root@vast etc]# cd /etc/rc.d/init.d/
2 [root@vast init.d]# chmod +x nginx
3 [root@vast init.d]# /sbin/chkconfig --level 345 nginx on

  服务操作:

[root@vast ~]# service nginx stop
停止 nginx:                                               [确定]
[root@vast ~]# service nginx start
正在启动 nginx:                                           [确定]
[root@vast ~]# service nginx reload
nginx: the configuration file /application/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx/conf/nginx.conf test is successful
重新载入 nginx:                                           [确定]
[root@vast ~]# service nginx status
nginx (pid 8659 8636) 正在运行...

  至此,nginx编译安装完成。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!