Youtube视频


相关链接

小白推荐使用源安装全模块nginx

centOS

# centos7+
yum -y update
yum -y install nginx-all-modules
# centos8+
dnf -y update
dnf -y install nginx-all-modules

ubuntu

apt update && apt upgrade
apt -y install nginx-full

编译安装

CentOS9编译环境准备

# 基础软件
dnf -y install wget zip unzip
# 安装编译环境
dnf -y install gcc gcc-c++ make
# 安装PCRE库
dnf -y install pcre pcre-devel
# 安装OpenSSL库
dnf -y install openssl openssl-devel
# 安装Zlib库
dnf -y install zlib zlib-devel
# 安装Perl库
dnf -y install perl-devel perl-ExtUtils-Embed
# 安装图片过滤所需依赖
dnf -y install gd gd-devel
# 安装XSTL所需依赖
dnf -y install libxslt-devel libxml2-devel

# Centos9默认的源没有,通过安装第三方源来安装
dnf -y install https://repo.aerisnetwork.com/pub/aeris-release-9.rpm
# 安装Geoip2所需依赖
dnf -y install libmaxminddb-devel
# Centos9默认的源没有,通过安装第三方源来安装
dnf -y install http://mirror.ppa.trinitydesktop.org/trinity/rpm/el9/trinity-r14/RPMS/noarch/trinity-repo-14.0.13-1.el9.noarch.rpm
# 安装GeoIP所需依赖
dnf -y install GeoIP-devel

# -------------------------------以下单命令整合------------------------------------

# 安装第三方源
dnf -y install https://repo.aerisnetwork.com/pub/aeris-release-9.rpm
dnf -y install http://mirror.ppa.trinitydesktop.org/trinity/rpm/el9/trinity-r14/RPMS/noarch/trinity-repo-14.0.13-1.el9.noarch.rpm

# 单命令安装
dnf -y install wget zip unzip gcc gcc-c++ make pcre pcre-devel openssl openssl-devel zlib zlib-devel perl-devel perl-ExtUtils-Embed gd gd-devel libxslt-devel libxml2-devel libmaxminddb-devel GeoIP-devel

Ubuntu22 编译环境准备

# 基础软件
apt -y install wget zip unzip
# 安装编译环境
apt -y install gcc g++ make
# 安装PCRE库
apt -y install libpcre3 libpcre3-dev
# 安装OpenSSL库
apt -y install openssl libssl-dev
# 安装Zlib库
apt -y install zlib1g-dev
# 安装Perl库
apt -y install libperl-dev
# 安装图片过滤所需依赖
apt -y install libgd-dev
# 安装XSTL所需依赖
apt -y install libxml2 libxml2-dev libxslt-dev
# 安装Geoip2所需依赖
apt -y install libmaxminddb-dev
# 安装GeoIP所需依赖
apt -y install libgeoip-dev

# -------------------------------以下单命令整合------------------------------------

# 单命令安装
apt -y install wget zip unzip gcc g++ make libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev libperl-dev libgd-dev libxml2 libxml2-dev libxslt-dev libmaxminddb-dev libgeoip-dev

编译前准备

# 下载稳定版nginx安装包、以及Geoip2模块,并解压。发文前最新稳定版是1.25.3。请到官网查看最新的稳定版
wget -O /opt/nginx.tar.gz http://nginx.org/download/nginx-1.25.3.tar.gz
wget -O /opt/geoip2.zip https://github.com/leev/ngx_http_geoip2_module/archive/refs/tags/3.4.zip 

cd /opt
mkdir nginx
tar -zxf nginx.tar.gz -C /opt/nginx --strip-components=1
unzip -jq geoip2.zip -d /opt/geoip2

# 创建配置目录、临时文件目录
mkdir /etc/nginx
mkdir -p /var/cache/nginx

# 新建用户和组
useradd -s /sbin/nologin -M nginx

# 进入到nginx解压目录
cd /opt/nginx

编译配置带注释(不可直接使用,用作参考)

# 编译配置带注释
./configure \
    # nginx安装的根路径
    --prefix=/usr/local/nginx \
    # nginx可执行文件的安装路径
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    # 日志文件路径
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    # nginx master进程的pid
    --pid-path=/run/nginx.pid \
    # 共享储存器互斥锁文件的路径
    --lock-path=/var/run/nginx.lock \
    # 运行的用户以及用户组
    --user=nginx \
    --group=nginx \  
    # 临时目录设置
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    # 编译模块,dynamic是动态模块,会存放在modules目录。
    # 动态模块在使用时:load_module modules/ngx_http_geoip2_module.so;
    # 异步文件支持
    --with-file-aio \
    # 线程池支持
    --with-threads \
    # 动态模块兼容性支持
    --with-compat \
    # ssl支持
    --with-http_ssl_module \
    # http2支持
    --with-http_v2_module \
    # 获取真实IP
    --with-http_realip_module \
    # 响应之前or之后追加内容
    --with-http_addition_module \
    # xml过滤器,用于转换xml响应
    --with-http_xslt_module=dynamic \
    # 图片过滤转换
    --with-http_image_filter_module=dynamic \
    # geoip模块
    --with-http_geoip_module=dynamic \
    # http响应内容替换
    --with-http_sub_module \
    # 通过WebDAV协议进行文件管理自动化
    --with-http_dav_module \
    # MP4、FLV视频支持
    --with-http_flv_module \
    # 流媒体支持,mpv.mv4.m4a
    --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 \
    # 降级用,当内存不足的时候允许返回204或者444代码
    --with-http_degradation_module \
    # 请求分片支持
    --with-http_slice_module \
    # 可以设置端点获取nginx的基本访问状态
    --with-http_stub_status_module \
    # 用于在 Perl 中实现 location 和变量处理器,并将 Perl 调用插入到 SSI中(不懂)
    --with-http_perl_module=dynamic \
    # 可以用来指定perl二进制文件的路径
    --with-perl=path
    --with-mail=dynamic \
    # 支持SSL/TLS邮箱
    --with-mail_ssl_module \
    # 负载均衡,实现四层协议的转发、代理或者负载均衡
    --with-stream=dynamic \
    # stream ssl支持
    --with-stream_ssl_module \
    # stream realip支持
    --with-stream_realip_module \  
    # stream geoip支持
    --with-stream_geoip_module=dynamic \
    # 运行从ClientHello消息中提取信息,而不会终止SSL/TLS,可用于提取SNI,实现分流
    --with-stream_ssl_preread_module \
    # POP3/IMAP4/SMTP 邮件代理服务器
    # 性能分析用的,开发人员使用
    --with-google_perftools_module
    # 启用debug调试
    --with-debug 
    # 添加CFLAGS
    --with-cc-opt=""
    # 第三方模块
    # 添加动态模块
    #--add-dynamic-module=/path/to/ngx_http_geoip2_module
    # 添加静态模块
    #--add-module=/path/to/ngx_http_geoip2_module
    # 静态添加geoip2模块,--with-stream 必须添加,且不能动态
    --add-module=/opt/geoip2

编译配置(可直接使用)

基本包含所有核心模块,可根据自己的需要删减。最后面增加了geoip2第三方模块。需要提前下载并解压到对应的目录,不需要可删除。
./configure \
    --prefix=/usr/local/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --user=nginx \
    --group=nginx \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    --with-file-aio \
    --with-threads \
    --with-compat \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_xslt_module=dynamic \
    --with-http_image_filter_module=dynamic \
    --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-http_perl_module=dynamic \
    --with-mail=dynamic \
    --with-mail_ssl_module \
    --with-stream \
    --with-stream_ssl_module \
    --with-stream_realip_module \
    --with-stream_geoip_module=dynamic \
    --with-stream_ssl_preread_module \
    --add-module=/opt/geoip2 \
    --with-debug

查看配置信息

cat auto/options | grep YES

编译和安装

# 编译安装
make && make install
# 多线程编译,下面是3个线程
make -j3

清除编译配置

make clean
rm -rf Makefile objs

System Daemon服务模版(参考源安装提供的服务文件)

Centos

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStartPost=/usr/bin/sleep 0.5
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Ubuntu

[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStartPost=/usr/bin/sleep 0.5
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target
如果觉得我的文章对你有用,请随意赞赏