ubuntu 24手动编译nginx源码及添加对ip地址过滤的支持

本文参考了csdn这位博主的文章并修改整理:

https://blog.csdn.net/qq_32262243/article/details/133951973

还是腾讯云ubuntu 24系统,我这里并没有手动下载pcre等源码,直接用ubuntu自带的就可以了,也不需要手动编译openssl等。

一、软件准备

1.1 nginx源码

  这里使用最新的稳定版本1.26.1的源码,下载地址:

https://nginx.org/download/nginx-1.26.1.tar.gz

1.2 geoip2模块源码

Releases · leev/ngx_http_geoip2_module · GitHub

  这个源码是配合nginx源码在做静态编译的时候添加对IP地址过滤支持用的。

1.3 libmaxmindb库

https://github.com/maxmind/libmaxminddb/releases

1.4 IP地址库

https://www.maxmind.com/en/home

注册然后登录,下载country库和city库备用

二、环境准备

   ubuntu 24系统做以下准备

sudo apt-get install build-essential zlib1g-dev libssl-dev libpcre2-dev libmaxminddb-dev libmaxminddb0 mmdb-bin vim 

三、编译安装

  解压缩第一步下载的4个压缩包,解压缩命令是tar -zxvf 压缩包名称,我这里数据盘挂载路径是/data,所以在解压缩以后我把这四个压缩包解压结果移动到了我的/data里面备用,其中geoip2模块的路径是/data/software/nginx/ngx_http_geoip2_module-3.4/,以下先编译安装libmaxmindb

cd /data/libmaxminddb-1.10.0
./configure
make
make install
ldconfig

  然后开始编译nginx

cd /data/nginx-1.26.1
./configure --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module  --with-http_v2_module --with-stream --add-module=/data/software/nginx/ngx_http_geoip2_module-3.4/
make
make install

 这就编译安装成功了,以下开始配置nginx

mkdir -p /data/nginx/logs
mkdir -p /usr/local/nginx/conf/v_host/
mkdir -p /usr/local/nginx/cache

  四、配置nginx

  修改/usr/local/nginx/conf/nginx.conf文件,增加对IP地址过滤的支持


#user  nobody;
worker_processes  auto;

error_log   /data/nginx/logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /data/nginx/logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;   
    keepalive_timeout  65;
    gzip  on;

    # 配置国家IP库
    geoip2 /data/GeoLite2-Country/GeoLite2-Country.mmdb{
        auto_reload 20m;
        $geoip2_metadate_country_build metadata build_epoch;
        #$geoip2_data_country_code country iso_code;
        $geoip2_country_name country names en;
        $geoip2_data_country_code default=US country iso_code;
    }

    # 配置城市IP库
    geoip2 /data/GeoLite2-City/GeoLite2-City.mmdb {
        auto_reload 20m;
        $geoip2_data_city_name city names en;
        $geoip2_data_province_name subdivisions 0 names en;
        $geoip2_data_province_isocode subdivisions 0 iso_code;
        $geoip2_continent_code continent code;
    }

    #配置规则,默认不允许所有IP访问,只允许中国IP访问
    map $geoip2_data_country_code $allowed_country {
        default no;
        CN yes;
    }

    # 引用v_host中的指定conf配置文件
    include /usr/local/nginx/conf/v_host/*.conf;

}

  在/usr/local/nginx/conf/v_host里面新增自己站点的.conf文件,如xxx.com.conf文件并配置里面的内容:

server {
    listen   443   ssl;
    server_name  xxxx.com;

    ssl_certificate /data/nginx/xxxxxxx.crt;
    ssl_certificate_key /data/nginx/xxxxxxxxx.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_stapling on;
    ssl_stapling_verify on;

    client_max_body_size 50M;

    # 添加客户端的IP头
    add_header client-country $geoip2_data_country_code;    

    # 做判断,如果国家不是中国,就返回451状态码给客户端;
    if ($geoip2_data_country_code != CN ) {
        return 451;
    }

    # 做判断,如果匹配到默认不允许的规则,就返回452状态码给客户端;   
    if ($geoip2_data_country_code = no ) {
        return 452;
    }
    
    location / {
        if ($allowed_country = no) {
                return 403;
        }
       #你的正常配置
    }
}

 最后,写一个nginx的systemd服务文件,将nginx配置为systemd 服务程序

vim /etc/systemd/system/nginx.service

[Unit]
Description=NGINX HTTP and reverse proxy server
After=syslog.target network.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
# Hardening
#InaccessiblePaths=/etc/gnupg /etc/shadow /etc/ssh
#ProtectSystem=full
#ProtectKernelTunables=yes
#ProtectControlGroups=yes
#SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @mount @obsolete @raw-io
#MemoryDenyWriteExecute=yes
#RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
#RestrictRealtime=yes

[Install]
WantedBy=multi-user.target

systemctl enable nginx 就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/782862.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman使用指南①网页版使用

postman官网地址:Postman API Platform 进入后点击右上角免费注册,注册后登录 登录之后即可在网页使用,无需下载

C语言学习笔记[22]:分支语句switch

switch语句 switch语句也是一种分支语句,常用于多分支的情况 switch语句的语法形式是: switch(整型表达式) {语句项; }而语句项是什么呢? case 整型常量表达式:语句; switch语句中的break 对于case 语句来说,我们day输入的多…

电动卡丁车语音芯片方案选型:让驾驶体验更智能、更安全

在追求速度与激情的电动卡丁车领域,每一次升级都意味着更加极致的驾驶体验。而今天,我们要介绍的,正是一款能够显著提升电动卡丁车智能化与安全性的语音芯片方案——为您的爱车增添一份独特的魅力与安全保障。 智能化升级,从“听…

ABeam德硕 | ABeam残疾员工运动员参观上海中心办公室,中野洋辅先生亲切慰问

近日,ABeam荣幸地邀请到公司的四位残疾员工运动员们来到上海中心办公室进行参观,并带领他们解锁「咨询顾问的工作日常」,领略咨询行业的魅力。 继半年前ABeam一行去往上海市残疾人文化体育促进中心拜访,这次的行程由ABeam全程安排…

开源网安入选全景图,成为唯一覆盖“开发安全”全领域厂商

​7月4日,知名网络安全媒体数说安全正式发布了《2024年中国网络安全市场全景图》,本次全景图共收录了408家国内优秀的网络安全企业,旨在为网络安全行业主管部门、从业者、产品及服务的使用者和购买单位以及资本机构提供全面、精准且具参考价值…

昇思25天训练营Day11 - 基于 MindSpore 实现 BERT 对话情绪识别

模型简介 BERT全称是来自变换器的双向编码器表征量(Bidirectional Encoder Representations from Transformers),它是Google于2018年末开发并发布的一种新型语言模型。与BERT模型相似的预训练语言模型例如问答、命名实体识别、自然语言推理、…

【matlab】状态空间模型与传递函数模型的建立与转换

目录 SISO系统 MIMO系统 状态空间模型 状态空间模型到传递函数模型的转换 传递函数模型到状态空间模型的转换 (1) 转换函数ss() (2) 规范形转换函数canon() (3) 常微分方程(传递函数)转换为状态空间模型函数dif2ss() 状态空间模型的变换 特征值、特征向量与广义特征向量的计算…

Java的基础语法

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.第一份程序1.1.代码编写1.2.代码运行1.2.1.命令行编译1.2.2.IEDA…

Science Advances|用于肌电检测的柔性微针电极阵列(健康监测/柔性传感/柔性电子)

2024年5月1日,美国南加州大学Hangbo Zhao课题组在《Science Advances》上发布了一篇题为“Highly stretchable and customizable microneedle electrode arrays for intramuscular electromyography”的论文。论文内容如下: 一、 摘要 可伸缩的三维穿透式微电极阵列在多个领…

Linux环境安装Maven

1.下载安装包 访问Maven官网下载地址:Maven – Download Apache Maven进行下载对应的安装包。 本文档使用的是apache-maven-3.9.8-bin.tar.gz 2.将下载好的安装包上传到环境上,本处是在/usr目录下新建了一个Maven的目录,如下: …

在线白板工具大揭秘:为何它成为远程团队的必备神器?

一直觉得白板是个很好的工具,不管是学习还是工作,它都能够帮助我们更好地整理思路。 作为一名经常需要远程协作和创意脑暴的职场人,显然传统普通的白板工具已经不够用了。 在这个数字化时代,我们更需要一个电子白板,一…

计算机如何存储浮点数

浮点数组成 在计算机中浮点数通常由三部分组成:符号位、指数位、尾数位。IEEE-754中32位浮点数如下: 上图32bit浮点数包含1bit的符号位,8比特的指数位和23bit的尾数位。对于一个常规浮点数,我们来看看它是如何存储和计算的。这里…

FPGA的理解,个人的见解,不一定对

类似于面包板上搭建电路,但是使用的是逻辑单元模块;如加法器,减法器,寄存器等 没有模拟电路的电容,电阻;但是逻辑单元的底层实现,使用MOS管等电路实现电路的开关;从而表示0&#xf…

1002-15SF 同轴连接器

型号简介 1002-15SF是Southwest Microwave的29.2 mm (V) DC 至 67 GHz 连接器。该连接器用于连接电缆和设备的组件,它可以提供电气连接和机械支撑。广泛应用于通信、电子、航空航天、军事等领域。 型号特点 电缆的中心导体插入连接器后部的母插座内置应力释放装置可…

SpringMVC系列十三: SpringMVC执行流程 - 源码分析

源码分析 执行流程图实验设计前端控制器分发请求处理器映射器处理器适配器调用目标方法调用视图解析器渲染视图作业布置 执行流程图 实验设计 1.新建com.zzw.web.debug.HelloHandler Controller public class HelloHandler {//编写方法, 响应请求, 返回ModelAndViewRequestMa…

GD 32点亮流水灯

1. 0 软件架构设置 2.0 API 接口以及数据结构定义 3.0 程序代码实现 程序项目的结构如下所示: 第一步:编写LED驱动,初始化驱动程序 创建结构体:第一个参数表示GPIO使能,第二个参数表示单片机的IO口,第三个…

html+css+js贪吃蛇游戏

贪吃蛇游戏&#x1f579;四个按钮控制方向&#x1f3ae; 源代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f60d;&#x1f60d;&#x1f60d; 源代码&#x1f4df; <!DOCTYPE html> <html lang"en"&…

idea删除分支并同步到gitLab以及gitLab上的分支删除

目录 idea删除分支并同步到gitLab 方法一&#xff08;推荐&#xff09; 方法二&#xff08;命令行&#xff09; gitLab上的分支删除 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

Tell Me Why:利用大型语言模型进行可解释的公共健康事实核查

Tell Me Why: Explainable Public Health Fact-Checking with Large Language Models 论文地址:https://arxiv.org/abs/2405.09454https://arxiv.org/abs/2405.09454 1.概述 最近的COVID-19大流行突显了公共健康领域事实核查的关键需求。在信息通过社交媒体平台迅速传播的时…

GPU 张量核心(Tensor Core)技术解读

一文理解 GPU 张量核心&#xff08;Tensor Core&#xff09; 引言 最新一代Nvidia GPU搭载Tensor Core技术&#xff0c;本指南深度解读其卓越性能&#xff0c;为您带来极致体验。 Nvidia最新GPU微架构中的核心技术——Tensor Core&#xff0c;自Volta起每代均获突破&#xf…