目录

问题现象

解决方法:

1、下载

2、linux系统上安装nginx

2.1、把 下载好的 nginx 的 tar.gz 压缩包 上传到linux服务器:

2.2、 解压:

 2.3、安装 nginx 的相关依赖:

 注意:

2.4、生成 Makefile 可编译文件

2.5、编译和安装

3、启动nignx

4、使用

5、拓展:

5.1、创建 名为 nginx 的文件

5.2、编辑 nginx 文件,把脚本信息拷贝进去,保存退出


问题现象

        Linux 系统如何部署 nginx(下载、安装、启动)?


解决方法:

1、下载

官网下载 nginx 镜像文件:

        nginx: download

选择稳定版本 下的镜像文件进行下载,

下载完成:

2、linux系统上安装nginx

2.1、把 下载好的 nginx 的 tar.gz 压缩包 上传到linux服务器:

2.2、 解压:

# 进入 nginx 压缩包所在目录
cd nginx 压缩包所在目录

# 解压
tar -zxvf nginx-1.20.2.tar.gz

解压成功:

 2.3、安装 nginx 的相关依赖:

# 安装 nginx 的相关依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

出现如下信息,则表示正在安装和安装成功:

 注意:

如果不安装依赖,直接解压的话,会出现如下报错:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

2.4、生成 Makefile 可编译文件

# 进入解压后的 nginx-1.20.2 目录
cd nginx-1.20.2 目录

# 执行configure脚本,设置安装nginx的初始化配置(--with-http_ssl_module:启动 SSL 的支持),生成 Makefile 可编译文件
./configure --with-http_ssl_module

其他参数:

--prefix=PATH:指定 nginx 的安装目录(默认/usr/local/nginx)
--conf-path=PATH:指定 nginx.conf 配置文件路径
--user=NAME:nginx 工作进程的用户
--with-pcre:开启 PCRE 正则表达式的支持
--with-http_ssl_module:启动 SSL 的支持
--with-http_stub_status_module:用于监控 Nginx 的状态
--with-http-realip_module:允许改变客户端请求头中客户端 IP 地址
--with-file-aio:启用 File AIO
--add-module=PATH:添加第三方外部模块

执行成功:

 生成 Makefile 可编译文件:

2.5、编译和安装

编译:

# 编译
make

编译成功:

 安装:

# 安装
make install

安装成功:

 红框中的就是默认安装路径(/usr/local/nginx

3、启动nignx

# 进入 nginx 安装目录下的sbin目录
cd nginx 安装目录(默认 /usr/local/nginx/sbin)

可以看到 nginx 脚本:

执行 nginx 脚本,启动 nginx 服务:

# 执行脚本启动 nginx 服务
./nginx

 查看 nginx 进程:

查看 nginx 进程:
ps -ef | grep nginx

根据 ./nginx 启动命令,可以得知我们需要的 nginx进程id 是 31049,接着查看该 进程id 所占用的端口号:

# 查看 进程id 所占用的端口号
netstat -nap | grep 进程id

 可以看见 nginx 服务默认占用的是 80 端口,接下来是要查看linux 防火墙,如果防火墙是开启状态的话,则需要确认防火墙开放的端口列表中,是否包含 80 端口:

# 查看已开放端口
sudo firewall-cmd --zone=public --list-ports

不出意外是没有的,那就需要我们去开放 80 这个端口:

# 开放 80 端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent

 开放端口后,还需要重启防火墙才能生效:

sudo firewall-cmd --reload

再次查看防火墙开放的端口列表,发现 80 端口已经开放成功:

4、使用

先用浏览器访问 linux服务器ip浏览器访问 ip 默认是80端口,所以不带 80端口号也可以),查看是否可以正常访问 上面 部署好的 nginx 服务:

至此,可以正常使用了!!!

5、拓展:

到本文章的 第 4 步 为止,nginx服务已经是可以正常使用了,所以以下部分不带有硬性执行要求,只提供给感兴趣的小伙伴。

由于 nginx 的常用命令执行起来比较繁琐,所以官网提供了脚本文件以便简化 nginx 命令,如下,已经修改了其中的 nginx NGINX_CONF_FILE 配置:

# nginx执行文件路径
nginx="/usr/local/nginx/sbin/nginx"

# nginx配置文件路径
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

#!/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:      /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="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/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 $prog -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

将以上脚本信息保存在一个以nginx命名的文件中;并放至linux服务器的 /etc/init.d 目录下即可:

5.1、创建 名为 nginx 的文件

# 进入 /etc/init.d 目录
cd /etc/init.d


# 创建 名为 nginx 的文件
touch nginx

 

5.2、编辑 nginx 文件,把脚本信息拷贝进去,保存退出

# 编辑 nginx 文件,写入脚本信息
vi nginx

给 nginx 脚本文件 赋予执行权限:

# 赋予执行权限
chmod +x nginx

如果不授权,则执行脚本命令时会报错,如:

增加nginx的系统服务,让chkconfig 指令可以管理该服务:

# 增加nginx的系统服务,让chkconfig 指令可以管理该服务
chkconfig --add nginx

 执行脚本命令,重启nginx,没有报错了:

 浏览器也能正常访问 nginx 首页:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐