Centos 下安裝 Nginx

Centos 下安裝 Nginx

今天咱們的目標就是在 Centos上搭建好 Nginx 服務,方便後續開展各類測試和學習。這也是學習其餘互聯網組件的第一步。接下來,我將分步驟描述源碼編譯的過程,並作部分說明。html

1. 官網下載最新源代碼,並解壓

目前官方最新版本(截止到2019年12月12日)爲 1.17.6,咱們直接去官網找到下載地址。不推薦直接使用 yum 安裝,由於存在以下兩個問題:mysql

  • 版本太舊,以 CentOS 爲例,直接 yum 安裝的版本是 1.12.2 版本,已經嚴重脫離了時代;linux

  • 沒法自定義安裝模塊,安裝目錄等等,不方便後續的實驗。nginx

 
 
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@localhost ~]# cd /usr/local/src
# 下載nginx安裝包[root@localhost src]# wget https://www.linuxprobe.com/Software/nginx-1.6.0.tar.gz 
# 解壓安裝包[root@localhost src]# tar -xzf nginx-1.6.0.tar.gz

2. 依賴庫提早安裝

Nginx 是徹底使用 C 語言開發的,因此必需要有 C 編譯環境,每每 CentOS 7.6 的環境會預裝 gcc 編譯器,因此不用額外安裝,若是沒有使用 yum 直接安裝便可。另外,咱們使用 Nginx 的壓縮功能、正則表達式功能等,須要安裝一些額外的依賴庫,這是必需要作的,否則在編譯階段就會報錯。以下3個是比較 Nginx 中比較經常使用模塊所依賴的庫,請在執行 Nginx 源碼編譯時提早安裝好。web

下載Nginx安裝所須要的依賴庫包正則表達式

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# ls
Python-3.7.0.tar.xz
[root@localhost src]# wget https://www.linuxprobe.com/Software/zlib-1.2.8.tar.gz
--2020-05-17 20:35:36--  https://www.linuxprobe.com/Software/zlib-1.2.8.tar.gz
正在解析主機 www.linuxprobe.com (www.linuxprobe.com)... 183.240.224.121, 183.240.224.114, 183.240.224.116, ...
正在鏈接 www.linuxprobe.com (www.linuxprobe.com)|183.240.224.121|:443... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:571091 (558K) [application/octet-stream]
正在保存至: 「zlib-1.2.8.tar.gz」
100%[==============================================================================================================================>] 571,091     1.16MB/s 用時 0.5s   
2020-05-17 20:35:37 (1.16 MB/s) - 已保存 「zlib-1.2.8.tar.gz」 [571091/571091])
[root@localhost src]# wget https://www.linuxprobe.com/Software/pcre-8.35.tar.gz
--2020-05-17 20:36:12--  https://www.linuxprobe.com/Software/pcre-8.35.tar.gz
正在解析主機 www.linuxprobe.com (www.linuxprobe.com)... 183.240.224.115, 183.240.224.119, 183.240.224.120, ...
正在鏈接 www.linuxprobe.com (www.linuxprobe.com)|183.240.224.115|:443... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:1996552 (1.9M) [application/octet-stream]
正在保存至: 「pcre-8.35.tar.gz」
100%[==============================================================================================================================>] 1,996,552   2.94MB/s 用時 0.6s   
2020-05-17 20:36:13 (2.94 MB/s) - 已保存 「pcre-8.35.tar.gz」 [1996552/1996552])
[root@localhost src]# wget https://www.linuxprobe.com/Software/openssl-1.0.1h.tar.gz
--2020-05-17 20:36:54--  https://www.linuxprobe.com/Software/openssl-1.0.1h.tar.gz
正在解析主機 www.linuxprobe.com (www.linuxprobe.com)... 183.240.224.120, 183.240.224.116, 183.240.224.117, ...
正在鏈接 www.linuxprobe.com (www.linuxprobe.com)|183.240.224.120|:443... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:4475692 (4.3M) [application/octet-stream]
正在保存至: 「openssl-1.0.1h.tar.gz」
100%[==============================================================================================================================>] 4,475,692   3.93MB/s 用時 1.1s   
2020-05-17 20:36:57 (3.93 MB/s) - 已保存 「openssl-1.0.1h.tar.gz」 [4475692/4475692])
[root@localhost src]# ls
openssl-1.0.1h.tar.gz  pcre-8.35.tar.gz  Python-3.7.0.tar.xz  zlib-1.2.8.tar.gz
[root@localhost src]#

在正式安裝Nginx服務程序以前,咱們還須要爲其解決相關的軟件依賴關係,例如用於提供Perl語言兼容的正則表達式庫的軟件包pcre,就是Nginx服務程序用於實現僞靜態功能必不可少的依賴包。下面來解壓、編譯、生成、安裝Nginx服務程序的源碼文件:sql

[root@localhost ~]# cd /usr/local/src

[root@localhost src]# ls
openssl-1.0.1h.tar.gz  pcre-8.35.tar.gz  Python-3.7.0.tar.xz  zlib-1.2.8.tar.gz
[root@localhost src]# tar xzvf pcre-8.35.tar.gz 
[root@localhost src]# cd pcre-8.35
[root@localhost pcre-8.35]# ./configure --prefix=/usr/local/pcre
[root@localhost pcre-8.35]# make
[root@localhost pcre-8.35]# make install

openssl軟件包是用於提供網站加密證書服務的程序文件,在安裝該程序時須要自定義服務程序的安裝目錄,以便於稍後調用它們的時候更可控。vim

[root@localhost pcre-8.35]# cd /usr/local/src
[root@localhost src]# ls
openssl-1.0.1h.tar.gz  pcre-8.35  pcre-8.35.tar.gz  Python-3.7.0.tar.xz  zlib-1.2.8.tar.gz
[root@localhost src]# tar xzvf openssl-1.0.1h.tar.gz
[root@localhost src]# cd openssl-1.0.1h
[root@localhost openssl-1.0.1h]# ./config --prefix=/usr/local/openssl
[root@localhost openssl-1.0.1h]# make
[root@localhost openssl-1.0.1h]# make install

openssl軟件包安裝後默認會在/usr/local/openssl/bin目錄中提供不少的可用命令,咱們須要像前面的操做那樣,將這個目錄添加到PATH環境變量中,並寫入到配置文件中,最後執行source命令以便讓新的PATH環境變量內容能夠當即生效:
瀏覽器

[root@linuxprobe pcre-8.35]# vim /etc/profile
………………省略部分輸出信息………………
 64 
 65 for i in /etc/profile.d/*.sh ; do
 66 if [ -r "$i" ]; then
 67 if [ "${-#*i}" != "$-" ]; then
 68 . "$i"
 69 else
 70 . "$i" >/dev/null
 71 fi
 72 fi
 73 done
 74 export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin
 75 unset i
 76 unset -f pathmunge
[root@linuxprobe pcre-8.35]# source /etc/profile

zlib軟件包是用於提供壓縮功能的函數庫文件。其實Nginx服務程序調用的這些服務程序無需深刻了解,只要大體瞭解其做用就已經足夠了:
bash

[root@localhost openssl-1.0.1h]# cd /usr/local/src
[root@localhost src]# ls
openssl-1.0.1h  openssl-1.0.1h.tar.gz  pcre-8.35  pcre-8.35.tar.gz  Python-3.7.0.tar.xz  zlib-1.2.8.tar.gz
[root@localhost src]# tar xzvf zlib-1.2.8.tar.gz
[root@localhost src]# cd zlib-1.2.8
[root@localhost zlib-1.2.8]# ./configure --prefix=/usr/local/zlib
[root@localhost zlib-1.2.8]# make
[root@localhost zlib-1.2.8]# make install

依賴庫安裝好後重啓系統

[root@localhost nginx-1.17.6]# reboot

編譯並安裝Nginx

[root@localhost mysql-5.6.19]# cd /usr/local/src
[root@localhost src]# useradd www -s /sbin/nologin
[root@localhost nginx-1.6.0]# make install

特別是在 Nginx 中,能夠指定安裝某些或者不安裝某些模塊,默認安裝的模塊只適合簡單的場景,每每在稍微複雜的狀況下,就須要額外添加其餘模塊,或者第三方以及自定義的模塊。這高可擴展性正是 Nginx 的一大亮點。想要查看 configure 的可選參數,使用 --help 選項便可:

$ ./configure --help

在全部可選參數中,最經常使用的有兩個:

  • –prefix=PATH:配置 Nginx 安裝部署的根目錄。相似於在 Windows 下安裝軟件,咱們指定安裝目錄;

  • –with-xxx_module:–without-xxx_module 其中 xxx 表示 Nginx 一個模塊的名稱,例如:

    • with-http_ssl_module -> 支持SSL/TLS,即HTTPS

    • with-http_v2_module -> 支持HTTP/2

    • without-http_fastcgi_module -> 不使用fastcgi

爲了後續測試功能完善,這裏咱們編譯時候,儘量多的引入一些模塊:


要想啓動Nginx服務程序以及將其加入到開機啓動項中,也須要有腳本文件。惋惜的是,在安裝完Nginx軟件包以後默認並無爲用戶提供腳本文件,所以劉遄老師給各位讀者準備了一份可用的啓動腳本文件,你們只需在/etc/rc.d/init.d目錄中建立腳本文件並直接複製下面的腳本內容便可(相信各位讀者在掌握了第4章的內容以後,應該能夠順利看懂這個腳本文件)。

[root@linuxprobe nginx-1.6.0]# vim /etc/rc.d/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: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/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

保存腳本文件後記得爲其賦予755權限,以便可以執行這個腳本。而後以絕對路徑的方式執行這個腳本,經過restart參數重啓Nginx服務程序,最後再使用chkconfig命令將Nginx服務程序添加至開機啓動項中。大功告成!

[root@linuxprobe nginx-1.6.0]# chmod 755 /etc/rc.d/init.d/nginx
[root@linuxprobe nginx-1.6.0]# /etc/rc.d/init.d/nginx restart
Restarting nginx (via systemctl):                          [  OK  ]
[root@linuxprobe nginx-1.6.0]# chkconfig nginx on

啓動 Nginx 後,首先使用ps -ef | grep nginx能夠查看 Nginx 進程是否已經啓動,基於默認的配置,咱們將看到 2 個 Nginx 的啓動進程:master 進程和 worker 進程。

這是咱們在前面講到的 Nginx 的 Master-Worker 機制,後面會進行詳細講解。另外,咱們能夠用命令 netstat -anltp | grep 80,看到 CentOS 上已經在監聽 80 端口,而這個監聽服務正是 Nginx。最後能夠用瀏覽器或者 curl 命令直接在 CentOS 機器上檢查 Nginx 服務:


[root@localhost ~]# curl http://localhost
<!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>
[root@localhost ~]# ps -ef |grep nginx
root     37071     1  0 22:46 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www      37073 37071  0 22:46 ?        00:00:00 nginx: worker process
root     37105  2397  0 22:49 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]#

當出現 「Welcome to Nginx!" 這樣的歡迎語句,代表咱們的 Nginx 已經正常運行了。

相關文章
相關標籤/搜索