Nginx编译与WebUI
非基础Nginx操作
最新Nginx版本安装
如有安装的nginx旧版本,避免拓展冲突,建议完全删除后执行新安装,见文后:附录
安装官方的nginx
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /etc/apt/keyrings/nginx.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/nginx.gpg] http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list > /dev/null
sudo apt update
拓展包安装
# 1.安装必要的开发依赖包,无具体的内容,需自己按报错探索安装
# 2.查看原nginx编译输出,记下arguments:后的内容
nginx -V
# 3.下载nginx源码及相关拓展包源码
git clone https://github.com/openresty/headers-more-nginx-module.git
git clone https://github.com/leev/ngx_http_geoip2_module.git
...
# 4.进入nginx源码目录并执行configure
./configure [第2步获取的内容] + [拓展包内容]
以这种方式添加: --add-dynamic-module=../nginx-module-vts --add-dynamic-module=../headers-more-nginx-module --add-dynamic-module=../ngx_http_geoip2_module
# 5.执行modules编译输出
make modules
# 6.将输出的so文件复制到/usr/lib/nginx/modules/下
cp ./objs/*.so /usr/lib/nginx/modules/
# 7.在nginx.conf中通过load引入
load_module modules/ngx_http_geoip_module.so;
# 8.重启
通过接入PPA,获取最新Nginx版本 - 已经放弃维护
# 1. 安装必要工具
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# 2. 导入 Nginx 官方签名密钥
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null
# 3. 添加 Nginx 官方稳定版源
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
# 4. 设置软件包优先级(可选,但推荐,可防止被系统自带源覆盖)
echo -e "Package: *\nPin: origin nginx.org\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
# 5. 更新并安装
sudo apt update
sudo apt upgrade
# 6. 安装额外模块(如需要)
sudo apt install libnginx-mod-http-headers-more-filter \
libnginx-mod-http-geoip2 \
libnginx-mod-stream-geoip2
动态模块加载
参考:服务监控 - Nginx-vts-exporter小节
Nginx编译安装 - 费力
apt-get install nginx
apt-cache search libnginx
apt-get install libnginx-mod-http-geoip2 libnginx-mod-http-headers-more-filter libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libnginx-mod-stream-geoip2
mkdir webapps
apt-get update
apt-get upgrade
apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev curl git
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz
git clone https://github.com/chobits/ngx_http_proxy_connect_module
git clone https://github.com/leev/ngx_http_geoip2_module.git
apt-get install libmaxminddb0 libmaxminddb-dev
nginx -V
cd nginx-1.18.0/
patch -p1 < ../ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_1018.patch
./configure --with-cc-opt='-g -O2 -ffile-prefix-map=/build/nginx-niToSo/nginx-1.18.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --add-dynamic-module=../ngx_http_geoip2_module --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --add-dynamic-module=../ngx_http_proxy_connect_module --with-cc-opt="-Wno-deprecated-declarations"
make
cd /usr/sbin/
ll nginx
mv nginx nginx.bak
cp /opt/nginx-1.18.0/objs/nginx ./
NginxWebUI
启动命令
#!/bin/bash
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java \
-jar -Dfile.encoding=UTF-8 /opt/nginxWebUI/nginxWebUI.jar \
--server.port=8080 \
--project.home=/opt/nginxWebUI/ \
--spring.database.type=mysql \
--spring.datasource.url=jdbc:mysql://192.168.1.5:3306/nginxwebui \
--spring.datasource.username=root \
--spring.datasource.password=****** \
>/dev/null 2>&1
停止命令
#!/bin/sh
pid=$(ps -ef | grep nginxWebUI.jar | grep -v grep | awk '{print $2}')
if [ ! $pid ]; then
echo "nginxWebUI.jar is not running"
exit 0
fi
kill -9 $pid
nginx配置
server {
server_name www.youcats.cn;
listen 14700 ssl http2;
listen [::]:14700 ssl http2;
ssl_certificate /opt/webapps/ssl-docs/youcats.cn/youcats.cn_bundle.crt;
ssl_certificate_key /opt/webapps/ssl-docs/youcats.cn/youcats.cn.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Allow-Credentials true;
if ($request_method = 'OPTIONS') {
return 204;
}
}
}
附录:卸载已有的nginx
⚙️ 准备工作:停止并确认 Nginx 状态
在动手卸载前,最好先停止 Nginx 服务,并记录下当前的版本,方便和之后的新版本做个对比。
- 停止 Nginx 服务:
sudo systemctl stop nginx - 检查当前版本(可选):使用以下命令记录下当前 Nginx 的版本号。
nginx -v这条命令会输出类似
nginx version: nginx/1.18.0 (Ubuntu)的信息。
🗑️ 第一步:彻底卸载 Nginx
为了让新安装的官方版本不与旧文件冲突,这里需要执行“彻底清理”,包括删除主程序、配置文件和一些可能会影响新安装的依赖包。
-
完全清除 Nginx 及其配置文件:
sudo apt purge nginx nginx-common nginx-corepurge命令会删除 Nginx 程序连同其配置文件(卸载后不会在系统中保留)。 -
删除所有 Nginx 相关的残留目录:
cp /etc/nginx /etc/nginx-bak -a sudo rm -rf /etc/nginx /var/log/nginx /var/cache/nginx这一步可以确保所有可能的残留文件都被彻底清除。
-
清理不再需要的依赖包:
sudo apt autoremoveautoremove命令会自动删除那些因为安装 Nginx 而被引入、但现在已经不再被任何软件需要的依赖包。
❌ 第二步:移除并清理旧的 PPA 源
这样能确保新安装的 Nginx 不会被旧的软件源信息干扰。
-
通过命令移除旧的 PPA 源:
如果你的 Nginx 是从 PPA 安装的,请将命令中的ppa:nginx/stable替换为你本地的实际 PPA 源名称。sudo add-apt-repository --remove ppa:nginx/stable这条命令会从系统的源列表中移除指定的 PPA。
-
手动查找并删除残留的源文件:
虽然add-apt-repository --remove很常用,但有时一些独立的.list文件可能会被遗漏。为了确保万无一失,可以手动检查并删除它们:cd /etc/apt/sources.list.d/ && sudo grep -l "nginx" *.list | xargs sudo rm这条命令组合会在
/etc/apt/sources.list.d/目录下,查找所有包含 “nginx” 的.list文件,并将其删除。
🌐 第三步:安装官方 Nginx 源
鉴于 Nginx 官方 PPA 已不再为 Ubuntu 22.04 及更高版本提供更新,我们将采用官方的 APT 仓库进行安装。
-
添加 Nginx 官方 GPG 密钥:
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor | sudo tee /etc/apt/keyrings/nginx-archive-keyring.gpg > /dev/null这一步是为了确保后续从官方源下载的软件包是经过签名、安全可信的。
-
添加 Nginx 官方软件源:
echo "deb [signed-by=/etc/apt/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list这条命令会创建配置文件
nginx.list,其中$(lsb_release -cs)会自动替换为你的系统代号(例如:jammy)。 -
设置源优先级(可选但建议):
这样可以确保系统优先从 Nginx 官方源进行安装和更新,而不是 Ubuntu 自带的、版本较旧的源。echo -e "Package: nginx\nPin: release o=nginx\nPin-Priority: 1000" | sudo tee /etc/apt/preferences.d/nginxPin-Priority: 1000的设置,让 Nginx 官方源的优先级高于默认源。 -
更新软件包列表:
sudo apt update在执行安装前,需要更新软件源信息,让系统识别到刚才添加的官方源。
✅ 第四步:安装并验证 Nginx
-
安装 Nginx:
sudo apt install nginx现在安装的就是官方源中提供的最新版本的 Nginx 了。
-
尝试验证安装:
- 检查版本:运行
nginx -v,检查输出的版本号,确认已从官方源更新。 - 查看服务状态:运行
sudo systemctl status nginx,确认服务是active (running)状态。
- 检查版本:运行
💡 几个小贴士
- 如果遇到错误:如果安装过程中出现错误,可以尝试运行
sudo apt --fix-broken install来修复一些潜在的依赖问题。 - 未来如何升级:以后要升级 Nginx 就方便多了,只需执行
sudo apt update && sudo apt upgrade即可。 - 常用文件位置:
- 配置文件:
/etc/nginx/ - 网站根目录:
/var/www/ - 访问日志:
/var/log/nginx/access.log - 错误日志:
/var/log/nginx/error.log
- 配置文件:
Nginx编译与WebUI
https://www.youcats.cn/archives/1770265040239
评论