Nginx从入门到实践(四)
Nginx常见问题和排错经验,实践应用场景中的方法处理Nginx安全,常见的应用层安全隐患,复杂访问控制,Nignx的sql防注入安全策略,Nginx的整体配置,搭建合理Nginx中间件架构配置步骤、策略Nginx性能优化:架构优化,操作系统优化、Nginx优化等...
常见问题
多个server_name中虚拟主机读取的优先级
当多个配置文件中server_name
相同,端口也相同时,Nginx读取配置文件的时候是按照文件名顺序进行读取的,优先读取第一个文件名下的配置.
如server1.conf
,server2.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_size502 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从入门到实践(四)的更多相关文章
- 学习nginx从入门到实践(四) 基础知识之nginx基本配置语法
nginx基本配置语法 1.http相关 展示每次请求的请求头: curl -v http://www.baidu.com 2.nginx日志类型 error.log. access.log log_ ...
- Nginx从入门到实践(一)
结合实践.收集各种场景.常见问题,讲解Nginx中最实用的Webserver场景,提供一套整体的搭建配置方式 Nginx中间件,不局限于业务逻辑,有效独立于后台开发框架(不论后端是Java开发.PHP ...
- Nginx从入门到实践(三)
动静分离 动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问. 动静分离的一种做法是将静态资源部署在nginx上, ...
- Nginx从入门到实践(二)
静态资源web服务 静态资源类型 CDN CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工 ...
- 学习nginx从入门到实践(五) 场景实践之静态资源web服务
一.静态资源web服务 1.1 静态资源 静态资源定义:非服务器动态生成的文件. 1.2 静态资源服务场景-CDN 1.3 文件读取配置 1.3.1 sendfile 配置语法: syntax: se ...
- #Python编程从入门到实践#第四章笔记
#Python编程从入门到实践#第四章笔记 操作列表 1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...
- python编程:从入门到实践----第四章>操作列表
一.遍历整个列表 1-1.假设有一个魔术师名单,需要将其中每个魔术师的名字都打印出来. # 用for循环来打印魔术师名单中的名字 magicians=['alice','david','carolin ...
- 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块
一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...
- nginx配置使用, 入门到实践
1. 本文做自己学习配置使用, 转自: https://mp.weixin.qq.com/s?__biz=Mzg2MjEwMjI1Mg%3D%3D&chksm=ce0dae4df97a275b ...
随机推荐
- nginx优化之配置文件优化一常用参数
#定义nginx运行的用户和用户组 user www www; #启动进程,通常设置成和cpu的数量相等 worker_processes 8 ; #为每个进程分配CPU,上面京8个进程分配到 ...
- 大数据---Ranger-1
背景:从软通出来,告别华为外包,离开H区,进入了一家搞大数据的创业公司,感觉周围都好陌生,记录下自己大数据的career! 2019-03-4新的征程-入职第一天: 一.办理入职手续 公司人比较少,没 ...
- 并发concurrent---2
背景:并发知识是一个程序员段位升级的体现,同样也是进入BAT的必经之路,有必要把并发知识重新梳理一遍. 并发concurrent: 使用ThreadLocal可以实现线程范围内共享变量,线程A写入的值 ...
- 编程心法 之什么是MVP What is MVP development?
Minimal Value product(feather), 比如说,如果是一个新的Photoshop,那么增加图片亮度就是一个MVP. 想要看到更多玮哥的学习笔记.考试复习资料.面试准备资料?想要 ...
- Django之路由分发和反向解析
一.路由分发: 路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系 from django.conf.urls import url,includ ...
- 微信小程序 canvas 绘制圆形状
page({ // 绘制canvas drawCanvas:function(){ const ctx = wx.createCanvasContext('poster') // 画圆形二维码 thi ...
- Android串口通讯
今天在整一个项目,需要利用串口通讯在网上看了好多人的帖子才稍微整出了一点头绪. 首先串口代码就是利用谷歌自己的api,将java代码放在java/android_serialport_api目录下,如 ...
- 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props”
未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props” ...
- nginx笔记----解决windows80端口被iis占用
打开注册表:regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP 数值数据修改成0或者其他 然后重启
- Web前端教程-HTML及标签的使用
目录 1. HTML简介 1.1. HTML文档基本结构 2. 标签 2.1. 标签语法 1.2. 标签的属性和值 1.3. 常见的标签 1. 基础标签 2. 格式标签 3. 表单标签 4. 框架标签 ...