【运维安全】运维界葵花宝典:Nginx配置与优化秘籍

这篇具有很好参考价值的文章主要介绍了【运维安全】运维界葵花宝典:Nginx配置与优化秘籍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

必要的原理介绍

● Nginx 里有一个master进程和多个worker进程.master进程并不处理网络请求,主要负责调度工作进程: 加载配置,启动工作进程及非停升级.worker进程负责处理网络请求与响应.
● master进程主要用来管理worker进程,具体包括如下4个主要功能:

  1. 接收来自外界的信号

  2. 向各worker进程发送信号

  3. 监控worker进程的运行状态

  4. 当worker进程退出后(异常情况下),会自动重新启动新的worker进程

● worker进程主要用来处理基本的网络事件:

  1. 多个worker进程之间是对等其相互独立的,他们同等竞争来自客户端的请求.

  2. 一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其他的进程请求.

  3. worker进程的个数是可以设置的,一般我们会设置与机器的cpu核数一致,同时,nginx 为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一核上,这样就不会因为进程的切换带来cache的失效

● master 需要完成的工作
○ 读取并验证配置信息
○ 创建.绑定及关闭套接字
○ 启动,终止及维护 worker 进程的个数
○ 无须中止服务而重新配置工作特性
○ 控制非中断式升级,启动新的二进制程序并在需要时回滚至老版本
○ 重新打开日志文件
○ 编译嵌入式 perl 脚本
● worker 进程主要完成的任务包括
○ 接收,传入并处理来自客户端的连接
○ 提供反向待了及过滤功能
○ nginx 任何能完成的其他工作

Nginx 的请求方式处理
● Nginx 是一个高性能的 web 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步机制,异步机制使用的是异步非阻塞方式

多进程机制
● 服务器每当收到一个客户端时就有服务器主进程(master process)生成一个子进程(worker process)出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。
● 使用进程的好处时各个进程之间时相互独立,不需要加锁,减少了使用锁对性能造成的影响,同时降低了编程的复杂度,降低开发成本。其次采用独立的进程可以让进程之间不会影响,如果一个进程发生异常退出时,其他进程正常工作,master 进程则很快的启动新的 worker 进程,确保服务不会中断,从而将风险降到最低。
● 缺点是操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定的开销。当有大量请求时,会导致系统性能下降。
nginx 事件驱动模型
● 在 Nginx 的异步非阻塞机制中,工作进程在调用 IO 后,就去处理其他的请求,当 IO 调用返回后,会通知该工作进程。对于这样的系统调用,主要使用 Nginx 服务器的事件驱动模型来实现。

● nginx 事件驱动模型由事件收集器和事件处理器三部分基本单元组成
○ 事件收集器 负责收集 worker 进程 IO 请求;
○ 事件发送器: 负责将 IO 事件发送到事件处理器;
○ 事件处理器: 负责各种事件的响应工作
● 事件发送器将每个请求放入一个待处理事件列表,使用非阻塞 I/O 方式调用 事件处理器 来处理该请求,其处理方式称为"多路 IO 复用方法,"常见的包括以下三种 select 模式,poll 模型.epoll 模型
Nginx 进程处理模型
● nginx 服务器使用 master/worker 多进程模式,多线程启动和执行的流程如下:

  1. 主程序 master process 启动后,通过一个 for 循环来接收和处理外部信号

  2. 主进程通过 fork 函数产生 worker 子进程,每个子进程执行一个 for 循环来实现 Nginx 服务器对事件的接收和处理
    当一个 worker 进程在 accept 这个连接之后,就开始 读取请求 , 解析请求 , 处理请求 ,产生数据后,再 返回给客户端 ,最后才 断开连接 ,这样一个完整的请求就是这样的了。我们可以看到,一个请求,完全由 worker 进程来处理,而且只在一个 worker 进程中处理。
    在 Nginx 服务器的运行过程中, 主进程 和 工作进程 需要进程交互。交互依赖于 Socket 实现的 管道 来实现。

第一步当然是安装了

#安装 pcre 依赖
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
#解压压缩文件
tar –xvf pcre-8.37.tar.gz
#进入安装目录后./configure 完成后,回到 pcre 目录下执行 make,最后执行 make install
./configure
make
make install
#安装 openssl 、zlib 、 gcc 依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

#安装nginx,解压
./configure
make && make install
#上面如果失败
yum install -y gcc gcc-c++
#进入目录 /usr/local/nginx/sbin/nginx 启动服务
./nginx


常用命令 咱复习一下

#启动命令,在/usr/local/nginx/sbin 目录下执行
./nginx

#关闭命令,在/usr/local/nginx/sbin 目录下执行
./nginx -s stop

#重新加载命令,在/usr/local/nginx/sbin 目录下执行
./nginx -s reload

核心笔记 配置文件

#配置文件存在的目录
/usr/local/nginx/conf 下

#1、全局块 
#从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配
#置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以
#及配置文件的引入等。
#这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是
#会受到硬件、软件等设备的制约

worker_processes  1;


#2、events 块
#events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 
#下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word 
#process 可以同时支持的最大连接数等。
#上述例子就表示每个 work process 支持的最大连接数为 1024.
#这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
events {
    worker_connections  1024;
}


#3、http 块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
 #3-1 http 全局块
 	http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
 #3-2 server 块
     这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了
    节省互联网服务器硬件成本。
     每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
     而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
     1、全局 server 块
     最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
     2、location 块
     一个 server 块可以配置多个 location 块。
     这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称
    (也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓
    存和应答控制等功能,还有许多第三方模块的配置也在这里进行。


核心配置 重点来了

反向代理
#1、反向代理实例一
#通过访问nginx=====》tomcat进行代理
#,修改nginx.conf下面为全部的配置文件,
#192.168.253.130 为你的nginx服务器ip
#http://127.0.0.1:8001 为你的tomcat的访问路径
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.253.130;

        location / {
	    proxy_pass http://127.0.0.1:8001;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

#修改tomcat端口为8001,启动tomcat
#重新加载nginx

然后访问 192.168.253.130===》》就会代理到 tomcat服务器



#2、反向代理实例二
#实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,准备两台tomcat
访问 http://192.168.253.130:9001/edu/ 直接跳转到tomcat1 127.0.0.1:8081
访问 http://192.168.253.130:9001/vod/ 直接跳转到tomcat2 127.0.0.1:8082

#在 http 块中添加 server{}

所有的配置如下
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.253.130;

        location / {
	    proxy_pass http://127.0.0.1:8001;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       9001;
        server_name  192.168.253.130;

        location ~ /edu/ {
	    proxy_pass http://127.0.0.1:8081;
        }

	location ~ /vod/ {
	    proxy_pass http://127.0.0.1:8082;
        }
    }
}

然后访问 192.168.253.130:9001/edu/a.html
===》》就会代理到 tomcat服务器127.0.0.1:8081//edu/a.html
然后访问 192.168.253.130:9001/vod/a.html
===》》就会代理到 tomcat服务器127.0.0.1:8081/vod/a.html


#####补充说明
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 
块中的正则 uri 和请求字符串做匹配。
 注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。


负载均衡

#首先准备两个同时启动的Tomcat
配置文件全部如下
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.253.130;

        location / {
	    proxy_pass http://127.0.0.1:8001;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       9001;
        server_name  192.168.253.130;

        location ~ /edu/ {
	    proxy_pass http://127.0.0.1:8081;
        }

	location ~ /vod/ {
	    proxy_pass http://127.0.0.1:8082;
        }
    }
	
    upstream myservers{
	server 192.168.253.130:8081;
	server 192.168.253.130:8082;
    }

    server {
        listen       9010;
        server_name  192.168.253.130;

        location / {
	    proxy_pass http://myservers;
	    proxy_connect_timeout 10;
        }
    }


}

#myservers名称自定义
#访问192.168.253.130:9010
=====>>>一个一次
192.168.253.130:8081;
192.168.253.130:8082;


#其他的负载均衡方式
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
 
 upstream myservers{
	server 192.168.253.130:8081;
	server 192.168.253.130:8082;
    }
    
    
2、weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
    upstream myservers{
	server 192.168.253.130:8081 weight=1;
	server 192.168.253.130:8082 weight=2;
    }

3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream myservers{
	ip_hash;
	server 192.168.253.130:8081;
	server 192.168.253.130:8082;
    }
 
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myservers{
	server 192.168.253.130:8081;
	server 192.168.253.130:8082;
	fair;
}


根据文件类型设置过期时间
location ~.*\.css$ {
    expires 1d;
    break;
}
location ~.*\.js$ {
    expires 1d;
    break;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    access_log off;
    expires 15d;    #保存15天
    break;
}

# curl -x127.0.0.1:80 http://www.test.com/static/image/common/logo.png -I #测试图片的max-age

禁止文件缓存
location ~* \.(js|css|png|jpg|gif)$ {
    add_header Cache-Control no-store;
}

静态文件压缩
server {
    # 开启gzip 压缩
    gzip on;
    # 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
    gzip_http_version 1.1;
    # 设置压缩级别,压缩级别越高压缩时间越长  (1-9)
    gzip_comp_level 4;
    # 设置压缩的最小字节数, 页面Content-Length获取
    gzip_min_length 1000;
    # 设置压缩文件的类型  (text/html)
    gzip_types text/plain application/javascript text/css;
}

指定定错误页面
# 根据状态码,返回对于的错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /source/error_page;
}复制代码

跨域问题

跨域的定义

  • 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。通常不允许不同源间的读操作。

同源的定义

  • 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。

nginx解决跨域的原理

例如:

  • 前端server域名为:http://xx_domain

  • 后端server域名为:https://github.com

  • 现在http://xx_domain对https://github.com发起请求一定会出现跨域。

不过只需要启动一个nginx服务器,将server_name设置为xx_domain,然后设置相应的location以拦截前端需要跨域的请求,最后将请求代理回github.com。如下面的配置:

## 配置反向代理的参数
server {
    listen    8080;
    server_name xx_domain

    ## 1. 用户访问 http://xx_domain,则反向代理到 https://github.com
    location / {
        proxy_pass  https://github.com;
        proxy_redirect     off;
        proxy_set_header   Host             $host;        # 传递域名
        proxy_set_header   X-Real-IP        $remote_addr; # 传递ip
        proxy_set_header   X-Scheme         $scheme;      # 传递协议
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

重定向配置
location / {
 return 404; #直接返回状态码
}
location / {
 return 404 "pages not found"; #返回状态码 + 一段文本
}
location / {
 return 302 /blog ; #返回状态码 + 重定向地址
}
location / {
 return https://www.mingongge.com ; #返回重定向地址
}

Gzip压缩
gzip_types  

#压缩的文件类型
 text/plain text/css 
 application/json 
 application/x-javascript 
 text/xml application/xml 
 application/xml+rss 
 text/javascript

gzip on;
#采用gzip压缩的形式发送数据

gzip_disable "msie6"
#为指定的客户端禁用gzip功能

gzip_static;
#压缩前查找是否有预先gzip处理过的资源

gzip_proxied any;
#允许或者禁止压缩基于请求和响应的响应流

gzip_min_length  1000;
#设置对数据启用压缩的最少字节数

gzip_comp_level 6;
#设置数据的压缩等级

SSL 证书配及跳转HTTPS配置
server {
      listen 192.168.1.250:443 ssl;
      server_tokens off;
      server_name mingonggex.com www.mingonggex.com;
      root /var/www/mingonggex.com/public_html;
      ssl_certificate /etc/nginx/sites-enabled/certs/mingongge.crt;
      ssl_certificate_key /etc/nginx/sites-enabled/certs/mingongge.key;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

# Permanent Redirect for HTTP to HTTPS
server 
{  
listen 80;  
server_name mingongge.com; 
https://$server_name$request_uri;
}

文件只能下载
    location /data {
    
      		 alias /data/;
             
            if ($request_filename ~* ^.*?\.(doc|pdf|xlsx|png|txt)$) {
                add_header Content-Disposition attachment;
                add_header Content-Type application/octet-stream;
            }
          
      		 proxy_connect_timeout 3;
      		 proxy_read_timeout 3;
      		 proxy_send_timeout 3;
       		 autoindex on;
             sendfile on;
             charset utf-8,gbk;
    }

只能查看图片
1.在图片所在的目录下创建一个名为.htaccess’的隐藏文件,该文件用于设置禁止下载
2.在.htaccess文件中添加以下配置:
	SetHandler default-handler
  Options-Indexes

这样设置后,用户就无法通过点击链接或使用下载工具下载图片了
接下来,在 nginx的配置文件中添加以下配置
location /path/to/images/ {
add header Content-Disposition "inline";
add header Content-Type "image/jpeg";
}
此配置会为指定路径下的所有图片文件添加Content-Disposition’和Content-Type’头信息,使其只能在线查看。
最后,重启 nginx 服务器使配置生效

    location /pic {
      		 alias /data/;
      		 proxy_connect_timeout 3;
      		 proxy_read_timeout 3;
      		 proxy_send_timeout 3;
       		 autoindex on;
             add_header Content-Disposition "inline";
             add_header Content-Type "image/jpeg";
    }

网络安全工程师(白帽子)企业级学习路线

第一阶段:安全基础(入门)

【运维安全】运维界葵花宝典:Nginx配置与优化秘籍,运维,安全,nginx,网络,网络安全,负向代理,负载均衡

第二阶段:Web渗透(初级网安工程师)

【运维安全】运维界葵花宝典:Nginx配置与优化秘籍,运维,安全,nginx,网络,网络安全,负向代理,负载均衡

第三阶段:进阶部分(中级网络安全工程师)

【运维安全】运维界葵花宝典:Nginx配置与优化秘籍,运维,安全,nginx,网络,网络安全,负向代理,负载均衡

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉【整整282G!】网络安全&黑客技术小白到大神全套资料,免费分享!

学习资源分享

【运维安全】运维界葵花宝典:Nginx配置与优化秘籍,运维,安全,nginx,网络,网络安全,负向代理,负载均衡文章来源地址https://www.toymoban.com/news/detail-834178.html

【运维安全】运维界葵花宝典:Nginx配置与优化秘籍,运维,安全,nginx,网络,网络安全,负向代理,负载均衡

到了这里,关于【运维安全】运维界葵花宝典:Nginx配置与优化秘籍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高项备考葵花宝典-项目范围管理输入、输出、工具和技术

            项目范围管理包括确保项目 “ 做 ” 且 “只做” 所需的 全部 工作(即不能少做,也不能多做,如果多做,就要消耗团队额外的时间和资源,并且无法被认可),以成功完成项目。项目范围管理主要在于定义和控制哪些工作应该包括在项目内,哪些不应该包括在项

    2024年02月04日
    浏览(38)
  • 第五次作业 运维高级 构建 LVS-DR 集群和配置nginx负载均衡

    1、基于 CentOS 7 构建 LVS-DR 群集。 LVS-DR模式工作原理 首先,来自客户端计算机CIP的请求被发送到Director的VIP。然后Director使用相同的VIP目的IP地址将请求发送到集群节点或真实服务器。然后,集群某个节点将回复该数据包,并将该数据包直接发送到客户端计算机(不经过direct

    2024年02月14日
    浏览(48)
  • Nginx 安全配置

            Nginx 是一个高性能的 HTTP 和反向代理服务,使用非常广泛,目前很大一部分网站均使用了 Nginx 作为 WEB 服务器,Nginx 虽然非常强大,但是安全防护的配置及恶意访问默认是没用做基础配置的。          在http下配置proxy_hide_header项;         增加或修改为  

    2024年02月10日
    浏览(34)
  • nginx web 安全配置

    1、配置响应头(X-Content-Type-Options、X-Frame-Options、X-XSS-Protection) 2、请求方法拦截(GET|POST|HEAD以外的请求无法访问) 3、sql 注入拦截 4、页面拦截

    2024年02月16日
    浏览(30)
  • Nginx监控安装:Filebeat+ES+Grafana,阿里创新发布《新高并发宝典》

    server_names_hash_bucket_size 128; large_client_header_buffers 4 32k; fastcgi_intercept_errors on; proxy_intercept_errors on; underscores_in_headers on; client_header_timeout 15s; client_body_timeout 15s; client_max_body_size 100m; client_body_buffer_size 2m; client_header_buffer_size 256k; #keepalive_timeout 0; keepalive_timeout 90s; keepalive_requests 2000

    2024年04月28日
    浏览(32)
  • centos安装nginx实操记录(加安全配置)

    配了一个负责均衡,如不需要,可将 server localhost: 多余的去掉 http中的配置 nginx 版本信息隐藏 隐藏Nginx后端服务X-Powered-By头 屏蔽非常见蜘蛛(爬虫) 分析网站日志发现,一些奇怪的 UA 总是频繁的来访问,而这些 UA 对网站毫无意义,反而给服务器增加压力,可以直接将其屏

    2024年02月09日
    浏览(41)
  • Nginx服务优化措施、网页安全与配置防盗链

    目录 一.优化Nginx 二.隐藏/查看版本号 隐藏版本号方法一:修改配置文件,关闭版本号  隐藏版本号方法二:修改源码文件中的版本号,重新编译安装 三.修改用户与组 四.设置缓存时间 五.日志切割脚本 六.设置连接超时控制连接访问时间 七.开启多进程 八.配置网页压缩 九

    2024年02月07日
    浏览(44)
  • nginx通过配置文件来进行的安全方面优化

    目录 1、隐藏版本号 2、配置错误页面重定向 3、添加header防止XSS攻击 4、利用referer图片防盗链 5、拒绝某些user-agent 6、限制HTTP请求方法 7、nginx开启https 8、控制迸发连接数 说明: 由于某些 Nginx 漏洞只存在于特定的版本,隐藏版本号可以提高安全性。 Nginx隐藏版本信息配置示

    2024年02月08日
    浏览(40)
  • Nginx配置ssl证书实现https安全访问

    目录 一、Nginx的安装与配置 安装步骤 二、SSL证书获取 三、Nginx配置 前题条件,拥有服务器与可以解析到该服务器的自己的域名。 若已安装好了Nginx,则需查看自己的Nginx是否开启了SSL的模块功能:  显示如上,则代表ssl功能已开启,否则可能出现以下错误提示: nginx: [emer

    2024年02月15日
    浏览(38)
  • 配置Nginx作为静态资源服务器及安全策略

    上一篇文章写了Nginx负载均衡实现方案详解,有同学私信我说能不能写一篇关于nginx代理静态资源的文章。当然没问题,这篇文章就分享一下如何配置Nginx作为静态资源服务器同时也分享一些常用的安全策略配置。 静态资源指的是在服务器端存储的不会变化的文件,这些文件的

    2024年02月21日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包