编译安装Nginx 1.18.0

#编译安装 Nginx1.18.0

CentOS平台编译环境:

安装make:

yum -y install gcc automake autoconf libtool make

安装g++:

yum install gcc gcc-c++

sudo yum install libxslt*

sudo yum install libxml2*

sudo yum -y install gd-devel

sudo yum -y install perl-devel perl-ExtUtils-Embed

sudo yum -y install GeoIP GeoIP-devel GeoIP-data

Debian & ubuntu平台编译环境:

本文描述Nginx 的源码编译安装过程

apt-get install build-essential g++ gcc make libtool openssl libpcre3 libpcre3-dev openssl libssl-dev libperl-dev automake

apt-get install libgd2-xpm*

apt-get install libxslt*

apt-get install libxml2*

apt-get install libgeoip-dev

############## 一、安装OpenSSL ######################

 

下载地址 https://www.openssl.org/source/

//wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz

wget https://www.openssl.org/source/openssl-1.1.0k.tar.gz

tar zxvf openssl-1.1.0k.tar.gz

cd openssl-1.1.0h/

./config

make && sudo make install

 

################ 二、安装PCRE ########################

下载地址 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

//wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz

wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz

tar zxvf pcre-8.43.tar.gz

./configure

make && sudo make install

 

################ 二、安装zlib ########################

wget https://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz

tar zxvf zlib-1.2.11.tar.gz

./configure

make && sudo make install

 

################ 三、安装Nginx ########################

 

下载Nginx源码包(stable version)

wget http://nginx.org/download/nginx-1.18.0.tar.gz

 

解压缩

tar zxvf nginx-1.18.0.tar.gz

 

cd nginx-1.18.0/

 

配置编译环境(--with-pcre、--with-openssl 的路径是源码路径,pcre、openssl的安装路径在/opt/local,但这里只需要源码路径)

 

./configure --prefix=/opt/nginx \

--with-select_module \

--with-poll_module \

--with-threads \

--with-file-aio \

--with-http_ssl_module \

--with-http_v2_module \

--with-http_realip_module \

--with-http_addition_module \

--with-http_xslt_module \

--with-http_xslt_module=dynamic \

--with-http_image_filter_module \

--with-http_image_filter_module=dynamic \

--with-http_geoip_module \

--with-http_geoip_module=dynamic \

--with-http_sub_module \

--with-http_dav_module \

--with-http_flv_module \

--with-http_mp4_module \

--with-http_gunzip_module \

--with-http_gzip_static_module \

--with-http_auth_request_module \

--with-http_random_index_module \

--with-http_secure_link_module \

--with-http_degradation_module \

--with-http_slice_module \

--with-http_stub_status_module \

--with-stream \

--with-stream=dynamic \

--with-stream_ssl_module \

--with-stream_realip_module \

--with-stream_geoip_module \

--with-stream_geoip_module=dynamic \

--with-stream_ssl_preread_module \

--with-compat \

--with-pcre \

--with-pcre=../pcre-8.43 \

--with-zlib=../zlib-1.2.11 \

--with-openssl=../openssl-1.1.0k

 

make && sudo make install

#################### 四、服务管理方法 ###################

 

1.赋予普通用户操作权限

sudo chmod u+s /opt/nginx/sbin/nginx

chown root:nginx /opt/nginx/sbin/nginx

2.查看帮助

$ /opt/nginx/sbin/nginx -h

3.检查配置文件正确性

$ /opt/nginx/sbin/nginx -t

4.查看进程号

cat /opt/nginx/logs/nginx.pid

23214

ps -ef | grep "nginx: master process" | grep -v 'grep' | awk -F ' ' '{print $2}'

23214

5.重新加载配置

sudo kill -HUP `cat /opt/nginx/logs/nginx.pid`

 

6.停止nginx的两种方式:

 

(1)发送停止信号

/opt/local/nginx/sbin/nginx -s stop

处理完请求后,关闭进程

(2)kill -QUIT ` cat /opt/local/nginx/logs/nginx.pid `

 

前提

如果你通过其它方法将nginx执行路径改在其它地方,如 /opt/guiji/nginx/sbin/,那么你需要修正下面的脚本

停止

如果你的nginx正在运行,你可以通过如下命令停止

 

Init脚本

vi /etc/init.d/nginx

 

#! /bin/bash

### BEGIN INIT INFO

# Provides: nginx

# Required-Start: $all

# Required-Stop: $all

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: starts the nginx web server

# Description: starts nginx using start-stop-daemon

### END INIT INFO

 

 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/opt/nginx/sbin/nginx

NAME=nginx

DESC=nginx

 

test -x $DAEMON || exit 0

 

# Include nginx defaults if available

if [ -f /etc/default/nginx ] ; then

. /etc/default/nginx

fi

 

set -e

 

case "$1" in

start)

echo -n "Starting $DESC: "

start-stop-daemon --start --quiet --pidfile /opt/guiji/nginx/$NAME.pid \

--exec $DAEMON -- $DAEMON_OPTS

echo "$NAME."

;;

stop)

echo -n "Stopping $DESC: "

start-stop-daemon --stop --quiet --pidfile /opt/nginx/$NAME.pid \

--exec $DAEMON

echo "$NAME."

;;

restart|force-reload)

echo -n "Restarting $DESC: "

start-stop-daemon --stop --quiet --pidfile \

/opt/nginx/$NAME.pid --exec $DAEMON

sleep 1

start-stop-daemon --start --quiet --pidfile \

/opt/nginx/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS

echo "$NAME."

;;

reload)

echo -n "Reloading $DESC configuration: "

start-stop-daemon --stop --signal HUP --quiet --pidfile /opt/nginx/$NAME.pid \

--exec $DAEMON

echo "$NAME."

;;

*)

N=/etc/init.d/$NAME

echo "Usage: $N {start|stop|restart|force-reload}" >&2

exit 1

;;

esac

 

exit 0

 

当然你也可以通过附件下载脚本

执行

此脚本为shell命令,所以要先有可执行权限

chmod +x /etc/init.d/nginx

update-rc

脚本准备好后,我们把它加到默认运行级别

/usr/sbin/update-rc.d -f nginx defaults

开始,停止,重启

/etc/init.d/nginx start/etc/init.d/nginx stop

/etc/init.d/nginx restart

 

脚本在系统启动时会自动执行start操作

 

==================================================================================

普通用户在restart和reload nginx时,会报错:

nginx:[warn] the "user" directive makes sense only if the master processruns with super-user privileges, ignored in/opt/nginx/conf/nginx.conf:2

 

原因是:默认情况下linux的1024以下端口是只有root用户才有权限占用,解决方法如下:

 

方法一:

所有用户都可以运行(因为是755权限,文件所有者:root,组所有者:root)

chown root:root nginx

chmod 755 nginx

chmod u+s nginx

 

方法二:

仅 root 用户和 test 用户可以运行(因为是750权限,文件所有者:root,组所有者:test)

chown root:nginx nginx

chmod 750 nginx

chmod u+s nginx

 

chmod u+s 就是给某个程序的所有者以suid权限,可以像root用户一样操作。

 

Set uid, gid,sticky bit的三个权限的详细说明:

一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.

如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.

setuid: 设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权

限, 从而可以更改用户的密码.

setgid: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.

sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于

该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件

但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录

具有写权限, 也不能删除该文件.

下面说一下如何操作这些标志:

操作这些标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来操作,

1) chmod u+s temp —为temp文件加上setuid标志. (setuid 只对文件有效)

chmod g+s tempdir —为tempdir目录加上setgid标志 (setgid 只对目录有效)

chmod o+t temp —为temp文件加上sticky标志 (sticky只对文件有效)

2) 采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如

4666, 2777等. 这一组八进制数字三位的意义如下,

abc

a - setuid位, 如果该位为1, 则表示设置setuid

b - setgid位, 如果该位为1, 则表示设置setgid

c - sticky位, 如果该位为1, 则表示设置sticky

设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如

rwsrw-r– 表示有setuid标志

rwxrwsrw- 表示有setgid标志

rwxrw-rwt 表示有sticky标志

那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s,t

==================================================================================

###CA根证书的生成:

生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)。

 

# Generate CA private key (生成私钥)

openssl genrsa -out ca.key 2048

# Generate CSR (生成证书签发请求)

openssl req -new -key ca.key -out ca.csr

# Generate Self Signed certificate(生成CA根证书)

openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt

 

#“KEY文件+CRT文件”转换为标准的PEM文件:

cat ca.key ca.crt > ca.pem

 

配置示例:

server {

listen 443 ssl;

server_name localhost;

 

ssl on;

ssl_certificate ca.pem;

ssl_certificate_key ca.key;

ssl_session_timeout 5m;

 

==============================================================================

 

###生成根证书

####a).生成根证书私钥(pem文件)

 

OpenSSL通常使用PEM(Privacy Enbanced Mail)格式来保存私钥,构建私钥的命令如下:

 

openssl genrsa -aes256 -out cakey.pem 2048

 

该命含义如下:

genrsa——使用RSA算法产生私钥

-aes256——使用256位密钥的AES算法对私钥进行加密

-out——输出文件的路径

2048——指定私钥长度

 

####b).生成根证书签发申请文件(csr文件)

 

使用上一步生成的私钥(pem文件),生成证书请求文件(csr文件):

 

openssl req -new -key cakey.pem -out ca.csr -subj \

"/C=CN/ST=jiangsu/L=nanjing/O=guiji/OU=guiji/CN=*.guiji.ai"

 

该命令含义如下:

req——执行证书签发命令

-new——新证书签发请求

-key——指定私钥路径

-out——输出的csr文件的路径

-subj——证书相关的用户信息(subject的缩写)

 

####c).自签发根证书(cer文件)

 

csr文件生成以后,可以将其发送给CA认证机构进行签发,当然,这里我们使用OpenSSL对该证书进行自签发:

 

openssl x509 -req -days 365 -sha1 -extensions v3_ca -signkey \

cakey.pem -in ca.csr -out ca.cer

 

该命令的含义如下:

 

x509——生成x509格式证书

-req——输入csr文件

-days——证书的有效期(天)

-sha1——证书摘要采用sha1算法

-extensions——按照openssl.cnf文件中配置的v3_ca项添加扩展

-signkey——签发证书的私钥

-in——要输入的csr文件

-out——输出的cer证书文件

 

==================================================================================

###NGINX加载动态模块:

 

load_module "modules/ngx_rtmp_module.so";

load_module "modules/ngx_stream_module.so";

==================================================================================

#Docker安装nginx1.18.0

docker pull nginx:stable-alpine

docker pull nginx:1.18.0-alpine

mkdir -p /opt/nginx/{conf,conf.d,html,logs}

docker run --name nginx -d -p 80:80 -v /opt/nginx/html:/usr/share/nginx/html -v /opt/nginx/conf.d:/etc/nginx/conf.d -v /opt/nginx/logs:/var/log/nginx nginx:stable-alpine

 

你可能感兴趣的:(Linux,nginx)