Nginx常见问题和排错经验,实践应用场景中的方法处理Nginx安全,常见的应用层安全隐患,复杂访问控制,Nignx的sql防注入安全策略,Nginx的整体配置,搭建合理Nginx中间件架构配置步骤、策略Nginx性能优化:架构优化,操作系统优化、Nginx优化等...

常见问题

多个server_name中虚拟主机读取的优先级

当多个配置文件中server_name相同,端口也相同时,Nginx读取配置文件的时候是按照文件名顺序进行读取的,优先读取第一个文件名下的配置.

server1.confserver2.conf,那优先加载的配置是server1.conf下面的配置.

启动时会抛出警告

多个location匹配的优先级

=:进行普通字符精确匹配,也就是完全匹配(高优先级)

^~:表示普通字符匹配,使用前缀匹配(高优先级)

~ ~*:表示执行一个正则匹配()

https://segmentfault.com/a/1190000002797606

try_files使用

按顺序检查文件是否存在

location / {
try_files $uri $uri/ /index.html
}

$uri 这个是nginx的一个变量,存放着用户访问的地址,

比如:http://www.xxx.com/index.html, 那么$uri就是 /index.html

$uri/ 代表访问的是一个目录,比如:http://www.xxx.com/hello/test/,那么$uri/就是 /hello/test/

完整的解释就是:try_files去尝试到网站目录读取用户访问的文件,如果第一个变量存在,就直接返回;

不存在继续读取第二个变量,如果存在,直接返回;不存在直接跳转到第三个参数上。

比如用户访问这个网地址:http://www.xxx.com/test.html

try_files首先会判断他是文件,还是一个目录,结果发现他是文件,与第一个参数 $uri变量匹配。

然后去到网站目录下去查找test.html文件是否存在,如果存在直接读取返回。如果不存在直接跳转到第三个参数,而第三个参数是一个location

alias和root的使用区别

location /request_path/image/ {
root /loca_path/image/;
}

一个请求http://XXX.XXX.XXX.XXX/request_path/iamge/cat.png,则实际的资源路径为/local_path/image/request_path/image/cat.png,实际是root+请求路径

location /request_path/image/ {
alias /loca_path/image/;
}

一个请求http://XXX.XXX.XXX.XXX/request_path/iamge/cat.png,则实际的资源路径为/loca_path/image/cat.png,没有请求的那个路径。

如何获取用户真实的ip信息

使用remote_addr

使用X-Forwarded-For

使用X-Real-IP(自定义)

常见错误码

413 Request Entity Too Large

修改用户上传文件限制 client_max_body_size

502 bad gateway

后端服务器无响应

504 Gateway Time-out

后端服务执行超时

403 访问被拒绝

404 资源未找到

400 请求参数错误

性能优化

ab压测工具

http://httpd.apache.org/docs/current/programs/ab.html

系统与Nginx性能优化

  • 网络
  • 系统
  • 服务
  • 程序
  • 数据库,底层服务

文件句柄设置

  • 文件句柄, Linux一切皆文件,文件句柄可以理解为就是一个索引

    • 文件句柄会随着我们进程的调用频繁增加
    • 系统默认对文件句柄有限制,不能让一个进程无限的调用
    • 需要限制每个进程和每个服务使用多大的文件句柄
    • 文件句柄是必须要调整的优化参数
  • 设置方式
    • 系统全局性修改
    • 用户局部性修改(vim /etc/security/limits.conf)
    • 进程局部性修改

      (vim /etc/nginx/nginx.conf)加入如下内容:

      worker_rlimit_nofile 35535;

CPU亲和配置

CPU亲和, 减少进程之间不断频繁迁移, 减少性能损耗

将Nginx worker进程绑到不同的核心上

//启动多少worker进程, 官方建议和cpu核心一致, 第一种绑定组合方式
#worker_processes 24;
#worker_cpu_affinity 000000000001 000000000010 000000000100 000000001000 000000010000 000000100000 000001000000 000010000000 000100000000 001000000000 010000000000 10000000000; //第二种方式
#worker_processes 2;
#worker_cpu_affinity 101010101010 010101010101; //最佳方式绑定方式
worker_processes auto;
worker_cpu_affinity auto;

查看nginx worker进程绑定至对应cpu

ps -eo pid,args,psr|grep [n]ginx

Nginx通用配置优化

user  nginx;
worker_processes auto; #使用的工作线程数
worker_put_affinity auto; # CPU亲和配置
# worker_cpu_affinity 01 10; error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; # 调整至1w以上,负荷较高建议2-3w以上
worker_rlimit_nofile 35535; #文件句柄设置 events {
use epoll; # 使用epoll模型,提高并发性能
worker_connections 10240; # 每一个worker可以处理的连接数
} http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
#Charset
charset uft-8; #字符集配置 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; # 静态服务器推荐打开
#tcp_nodelay on;
keepalive_timeout 65; gzip on;
gzip_disable "MSIE [1-6]\."; # IE6以前不支持Gzip的压缩,关闭
gzip_http_version 1.1; include /etc/nginx/conf.d/*.conf;
}

Nginx安全

常见的恶意行为

爬虫行为和恶意抓取,资源盗用

预防方法:

基础防盗链功能

secure_link_module-数据加密

access_module-对后台提供IP防护

攻击手段之暴力破解

密码撞库

预防方法:

提高密码复杂度

access_module-对后台提供IP防护

预警机制(结合lua)

文件上传漏洞

利用可以上传文件的接口将恶意代码植入到服务器中,再通过url去访问以执行代码

SQL注入

Nginx+LUA防火墙功能

https://github.com/loveshell/ngx_lua_waf

Nginx版本更新和本身漏洞

静态资源服务的功能设计

Nginx作为代理服务的需求

需求设计评估

Nginx从入门到实践(四)的更多相关文章

  1. 学习nginx从入门到实践(四) 基础知识之nginx基本配置语法

    nginx基本配置语法 1.http相关 展示每次请求的请求头: curl -v http://www.baidu.com 2.nginx日志类型 error.log. access.log log_ ...

  2. Nginx从入门到实践(一)

    结合实践.收集各种场景.常见问题,讲解Nginx中最实用的Webserver场景,提供一套整体的搭建配置方式 Nginx中间件,不局限于业务逻辑,有效独立于后台开发框架(不论后端是Java开发.PHP ...

  3. Nginx从入门到实践(三)

    动静分离 动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问. 动静分离的一种做法是将静态资源部署在nginx上, ...

  4. Nginx从入门到实践(二)

    静态资源web服务 静态资源类型 CDN CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工 ...

  5. 学习nginx从入门到实践(五) 场景实践之静态资源web服务

    一.静态资源web服务 1.1 静态资源 静态资源定义:非服务器动态生成的文件. 1.2 静态资源服务场景-CDN 1.3 文件读取配置 1.3.1 sendfile 配置语法: syntax: se ...

  6. #Python编程从入门到实践#第四章笔记

    #Python编程从入门到实践#第四章笔记   操作列表 ​​​1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...

  7. python编程:从入门到实践----第四章>操作列表

    一.遍历整个列表 1-1.假设有一个魔术师名单,需要将其中每个魔术师的名字都打印出来. # 用for循环来打印魔术师名单中的名字 magicians=['alice','david','carolin ...

  8. 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块

    一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...

  9. nginx配置使用, 入门到实践

    1. 本文做自己学习配置使用, 转自: https://mp.weixin.qq.com/s?__biz=Mzg2MjEwMjI1Mg%3D%3D&chksm=ce0dae4df97a275b ...

随机推荐

  1. jQuery中的prop()和attr()的区别

    1.jQuery中的prop()和attr()的区别 prop()是在jQuery1.6版本之后才有的,在之前一直都是使用attr(), prop()修复了attr()的一些小bug. 2.推荐用法: ...

  2. PHP接口APP接口

    使用PHP来生成APP接口数据是非常简单的,如果你还不了解PHP没有关系,只需要看过PHP的基本语法,再看本示例就可以了. APP接口一般都是json格式(当然也有少数xml格式)遵循restful规 ...

  3. web.xml的<url-parttern>的匹配规则

    <url-parttern>顾名思义是对url(统一资源定位符)的一种匹配,是对“http:........."地址的匹配,但是会减去应用上下文,就是你的web程序的名字,如果你 ...

  4. Python数据处理与计算——概述

    Python是一种面向对象的,动态的程序设计语言,具有非常简洁而清晰的语法,适合于完成各种高层任务.它既可以用来快速开发程序脚本,也可以用来开发大规模的软件. 随着NumPy.SciPy.Matplo ...

  5. Android RecyclerView初探

    今天研究了一下RecyclerView,RecyclerView比ListView的效率更高而且可以横向滑动,所以现在许多Android项目更倾向与使用RecyclerView. 下面是一个Recyc ...

  6. iOS----------use_frameworks!

    1.https://segmentfault.com/a/1190000007076865 2.https://www.jianshu.com/p/8269e4cac48f 3.https://www ...

  7. C#自定义控件添加到工具箱

    1.在需要使用这个自定义控件的项目中,在引用中,右键,添加引用,浏览,找到dll(如:ComButton.dll),进行添加,这时候,控件应该是能够自动添加到工具箱的. 2.在Visual Studi ...

  8. NVIDIA-SMI系列命令总结

    1  NVIDIA-SMI介绍 nvidia-smi简称NVSMI,提供监控GPU使用情况和更改GPU状态的功能,是一个跨平台工具,它支持所有标准的NVIDIA驱动程序支持的Linux发行版以及从Wi ...

  9. 虚拟机安装windows7 VMware12 安装window7

    闲来无事就来搞虚拟机装操作系统!期间出现很多错误,分享一下 一.安装虚拟机 二.准备安装的镜像文件 我下载的是windows7纯净版 深度技术里面下载的(http://www.xitongzhijia ...

  10. python进阶之生成器

    迭代器 什么叫迭代 可以被for循环的就说明他们是可迭代的,比如:字符串,列表,字典,元祖,们都可以for循环获取里面的数据 下面我们看一个代码: number = 12345 for i in nu ...