当前位置: 首页 > news >正文

Nginx简单配置 - 基础安全

一些个人的nginx配置,本篇完全凭空写的,未重新执行一遍命令,和我的真实配置略有出入。

docker run nginx

#准备一个空文件夹
mkdir nginx
cd nginx

#host模式、overlay网络映射端口,为了这一丁点的性能
#也方便使用非常规端口,用host吧
docker run -d --name nginx \
  --restart always \
  --network host \
  -v `pwd`/conf.d:/etc/nginx/conf.d \
  -v `pwd`/logs:/var/log/nginx \
  -v `pwd`/data:/data \
  nginx:1.22

错误页禁止显示版本号

禁止显示版本号没什么作用,总的来说就是为了安全(正常用户,一般不会访问到错误页面,对不友好的访客,提供的信息少总没错)。
由于没有映射nginx.conf文件,需要从容器拷贝出来修改,不建议进容器安装vim改

  1. nginx.conf从容器内复制出来,
  2. 编辑nginx.conf文件,在http块中插入一行:server_tokens off;
  3. 修改后再复制回去
docker cp nginx:/etc/nginx/nginx.conf .             #复制出来
vim nginx.conf   #编辑...
docker cp nginx.conf nginx:/etc/nginx/nginx.conf    #复制回容器
rm nginx.conf    #删除本地文件,没什么用了
  • 完整文件供核对
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    server_tokens off;   #仅添加这一行,禁用版本显示,其它不变
    include /etc/nginx/conf.d/*.conf;
}

添加默认配置

默认的配置主要是用来禁止未定义的访问链接(比如ip访问),减少不必要的麻烦,为了安全,正常用户不会触发该配置。
自定义证书主要用于default配置的443端口,没其它作用,证书信息可以瞎填,不启用https可跳过。

  • 生成自定义证书
mkdir conf.d/cert
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout conf.d/cert/0default.key -out conf.d/cert/0default.crt
  • conf.d/0default.conf
    由于按ascii排序,只要其它配置文件不是瞎起名字,0default.conf就在第一个。
server {
    server_name _;
    listen 80 default_server;
    listen 443 default_server;

    ssl_certificate   conf.d/cert/0default.crt;
    ssl_certificate_key  conf.d/cert/0default.key;

    root /data/tmp;
    access_log  /var/log/nginx/default.access.log;
    error_log   /var/log/nginx/default.error.log;

    deny all;
    #或者重定向到某个页面
    #return 302 https://axboy.dev;
}

示例配置

我的习惯是完整域名作为文件名,每个子域名1个conf文件,以www.axboy.dev为例。
一堆教程都是nginx.conf一把梭,子域名很少或者配置几乎不会改了,一把梭没关系,否则建议分开。

  • conf.d/www.axboy.dev.conf
server {
    server_name axboy.dev *.axboy.dev www.axboy.dev;
    client_max_body_size	10m;
    listen *:80;
    listen *:443 ssl;
    #ssl on;

    # 个人习惯,静态文件和(子)域名对应
    root /data/www.axboy.dev/;
    index index.html index.htm;

    access_log  /var/log/nginx/www.axboy.dev.access.log;
    error_log   /var/log/nginx/www.axboy.dev.error.log;

    # 证书配置
    ssl_certificate   conf.d/cert/cloudflare.axboy.dev.pem;
    ssl_certificate_key  conf.d/cert/cloudflare.axboy.dev.key;

    location /api {
        proxy_pass              http://172.17.0.1:8080;
        proxy_headers_hash_max_size             51200;
        proxy_headers_hash_bucket_size          6400;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_buffering off;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

其它

  • 所有文件树
    下面列出关于本篇的目录结构,供理解。
#tree -a .
.
├── conf.d
│   ├── 0default.conf
│   ├── www.axboy.dev.conf
│   └── cert
│       ├── 0default.key
│       ├── 0default.crt
│       ├── cloudflare.axboy.dev.key
│       └── cloudflare.axboy.dev.pem
├── data
│   ├── test.axboy.dev
│   └── www.axboy.dev
└── logs
    ├── access.log
    ├── default.access.log
    ├── default.error.log
    ├── error.log
    ├── www.axboy.dev.access.log
    └── www.axboy.dev.error.log

相关文章:

  • 基于sdrpi的openwifi实践2:生成BOOT.BIN
  • 七、安装Centos7+8系统+超级优化
  • Kali-登录暴力破解器工具-medusa使用
  • 除砷树脂HP-776
  • 矿产行业供应链协同系统解决方案:构建数智化平台,保障矿产资源安全供应
  • 申请专利流程及费用。
  • HTML+CSS期末网页设计前端作品(大三)
  • java-php-python-ssm-民航售票管理系统-计算机毕业设计
  • 学生台灯用led灯好还是荧光灯好?推荐几款高品质的LED灯
  • RabbitMQ安装
  • 为啥3次握手4次挥手
  • 前端promise理解
  • node fs createReadStream读取大文件,配置参数highWaterMark
  • Google Earth Engine(GEE)——一个简单的多指数影像的加载和下载以北京市为例
  • 【Docker】docker+Nginx部署前端项目
  • 【刷算法】从上往下打印二叉树
  • java8 Stream Pipelines 浅析
  • JAVA多线程机制解析-volatilesynchronized
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux各目录及每个目录的详细介绍
  • Linux中的硬链接与软链接
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 回顾2016
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端临床手札——文件上传
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 源码安装memcached和php memcache扩展
  • Mac 上flink的安装与启动
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • (12)Linux 常见的三种进程状态
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (算法)N皇后问题
  • (一)RocketMQ初步认识
  • (一)插入排序
  • (转)linux 命令大全
  • (转)关于pipe()的详细解析
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET多线程执行函数
  • .NET开源快速、强大、免费的电子表格组件
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ NOI 2001 ] 食物链
  • [100天算法】-二叉树剪枝(day 48)
  • [C#7] 1.Tuples(元组)
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [HCIE] IPSec-VPN (手工模式)
  • [HNOI2015]实验比较
  • [HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页
  • [Java开发之路](14)反射机制