当今做网站的语言有哪些,推荐几个没封的网址,企业网站排名提升,建筑工程网签合同周末可以签吗书接上回#xff1a;
上回书说到#xff0c;nginx的前世今生#xff0c;这回我们继续说
3.缓冲秘籍#xff0c;洪流控水 Nginx的缓冲区是其处理数据传输和提高性能的关键设计之一#xff0c;主要用于暂存和管理进出的数据流#xff0c;以应对不同组件间速度不匹配的问题…书接上回
上回书说到nginx的前世今生这回我们继续说
3.缓冲秘籍洪流控水 Nginx的缓冲区是其处理数据传输和提高性能的关键设计之一主要用于暂存和管理进出的数据流以应对不同组件间速度不匹配的问题确保数据能够高效、有序地传输。缓冲区的设计使得Nginx能够在客户端与后端服务器之间的数据交换中发挥桥梁作用尤其是在处理动态内容和静态资源时。 想象一下苦逼程序猿凯叔在一家伟大的公司工作他经常需要和不同的团队中的妹子交接文件。Nginx的缓冲区在这里就像凯叔手边的一个文件中转站。
凯叔代表Nginx服务器负责协调内外部的数据传输。妹子们代表客户端和后端服务器有的是给凯叔送文件的客户端请求有的是等待接收文件的后端响应。 接收文件客户端请求 当妹子A客户端要给凯叔Nginx送来一堆文件请求数据但凯叔可能正忙于整理其他文件无暇立刻处理。这时凯叔身边的客户端缓冲区就发挥作用了它相当于一个临时存放区先把妹子A的文件收下等凯叔有空了再慢慢处理。这样妹子A可以立刻回去做其他事不用等待。 发送文件后端响应 凯叔处理完文件后需要把这些文件交给妹子B后端服务器。但假设妹子B今天穿了个小背包一次拿不了太多东西。这时服务端缓冲区就派上用场了。凯叔先把文件整理好放在缓冲区里一点点按照妹子B能接受的速度传递给她保证数据不会因为一次性给太多而丢失或混乱。 应对不同速度的交往 假设某个妹子走得特别快高速客户端而凯叔还在整理文件缓冲区可以让凯叔先告诉妹子“稍等一下我在准备”避免妹子一直空等。反过来如果妹子走得慢慢速后端响应凯叔也不会因为等待而浪费时间他可以把文件先放缓冲区自己继续处理其他事务。 缓冲区就是这个灵活的文件中转站Nginx的缓冲区通过合理调配解决了数据传输中的速度不匹配问题确保了信息流通的顺畅提高了整体的工作效率同时也保证了数据传输的可靠性让苦逼的凯叔在与妹子们的工作中更加游刃有余。
缓冲区江湖过客的临时驿站 客户端缓冲区负责存储客户端请求的数据特别是在客户端发送数据较慢或者请求体较大的情况下可以防止数据丢失确保数据完整地被后端处理。 服务端缓冲区或称为上游缓冲区主要用于缓冲从后端服务器返回的响应数据。当后端服务器的响应速度快于客户端的接收速度时Nginx可以先将数据存储在缓冲区中然后根据客户端的实际接收能力逐步发送避免了因速度不匹配导致的效率低下。 Nginx的缓冲区机制通过灵活的配置和高效的数据管理确保了在不同网络条件下数据传输的高效与稳定是Nginx作为高性能Web服务器和反向代理服务器的重要特性之一。
调配得宜行云流水内存江湖的运筹帷幄 合理配置Nginx的缓冲区就像是在内存江湖中的运筹帷幄能让数据流转更加行云流水。为了达到这样的效果我们需要根据实际应用场景和资源情况细致调整以下关键参数 proxy_buffering是否启用缓冲机制默认为on关闭状态。 client_body_buffer_size设置缓冲客户端请求数据的内存大小。 proxy_buffers为每个请求/连接设置缓冲区的数量和大小默认4 4k/8k。 proxy_buffer_size设置用于存储响应头的缓冲区大小。 proxy_busy_buffers_size在后端数据没有完全接收完成时Nginx可以将busy状态的缓冲返回给客户端该参数用来设置busy状态的buffer具体有多大默认为proxy_buffer_size*2。 proxy_temp_path当内存缓冲区存满时可以将数据临时存放到磁盘该参数是设置存储缓冲数据的目录。 path是临时目录的路径。 语法proxy_temp_path path; path是临时目录的路径 proxy_temp_file_write_size设置每次写数据到临时文件的大小限制。 proxy_max_temp_file_size设置临时的缓冲目录中允许存储的最大容量。 非缓冲参数项 proxy_connect_timeout设置与后端服务器建立连接时的超时时。 proxy_read_timeout设置从后端服务器读取响应数据的超时时间。 proxy_send_timeout设置向后端服务器传输请求数据的超时时间。
http{ proxy_connect_timeout 10; proxy_read_timeout 120; proxy_send_timeout 10; proxy_buffering on; client_body_buffer_size 512k; proxy_buffers 4 64k; proxy_buffer_size 16k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_temp_path /soft/nginx/temp_buffer;
}1.proxy_buffering
配置位置http, server, location功能控制是否开启对来自后端服务器响应的缓冲。默认值为on。策略对于动态内容若后端响应时间较长且客户端连接速度较慢开启此选项可提升用户体验。而对于静态内容或响应迅速的动态内容考虑关闭以减少内存使用。 2.proxy_buffer_size
配置位置http, server, location功能定义了单个缓冲区的大小主要用于存储响应头和较小的响应体。策略根据响应头的大小合理设置一般设置为几个KB到几十KB确保能够容纳大部分响应头避免频繁分配小块缓冲区。 3. proxy_buffers
配置位置http, server, location功能定义了缓冲区的数量和大小。格式为proxy_buffers number size;。策略基于后端响应的平均大小和期望同时处理的请求数量来设定。例如proxy_buffers 8 4k;表示创建8个大小为4KB的缓冲区。对于大型文件下载或视频流可能需要更大的缓冲区和更多数量。 4.proxy_max_temp_file_size
配置位置http, server, location功能指定当缓冲区不足时Nginx可以使用的临时文件最大大小。策略当处理非常大的响应体时合理设置此参数如1G、2G可以避免内存耗尽。但要注意频繁的磁盘I/O可能会影响性能。 5.proxy_busy_buffers_size
配置位置http, server, location功能定义了当缓冲区正在被写入磁盘时Nginx仍保留用于处理新请求的缓冲区大小。策略应大于或等于proxy_buffers中最大的缓冲区大小以确保足够的内存空间用于处理并发请求。 6.综合策略
监控与调整通过日志和性能监控工具观察实际运行中的缓冲区使用情况根据实际情况微调参数。资源平衡在内存充足的情况下增加缓冲区可以提升性能但需注意不要过度消耗内存影响系统稳定性。特殊情况处理对于特定的慢请求或大文件传输考虑单独配置或利用特殊指令如proxy_ignore_client_abort来优化。测试验证任何配置变更后务必进行充分的测试包括压力测试确保新的配置既能提升性能又能保持系统的稳定运行。 通过以上策略的精细调整Nginx的缓冲区配置就能更加得宜实现数据传输的行云流水有效地运筹帷幄于内存江湖之中。当然除了缓存区还有缓存机制的配置也能使得nginx在应用缓存方面如虎添翼。 如何在Nginx中优化配置代理缓存功能首先我们得深入了解一系列与缓存相关的配置指令。
http {# 定义缓存存储路径及参数proxy_cache_path /data/nginx/cache levels1:2 keys_zonemy_cache:10m inactive60m max_size1g;# 解释# /data/nginx/cache 是缓存文件存放的目录。# levels1:2 定义了缓存目录的层次结构。# keys_zonemy_cache:10m 设置缓存键值空间名为my_cache大小为10MB。# inactive60m 指定缓存条目在不被访问60分钟后失效。# max_size1g 限制缓存区最大容量为1GB。upstream backend {server backend_server_ip_or_domain:port; # 后端服务器地址}server {listen 80;server_name example.com;location / {# 开启代理功能并将请求转发给后端服务器proxy_pass http://backend;# 开启代理缓存功能proxy_cache my_cache;# 缓存相关控制proxy_cache_bypass $http_pragma; # 根据Pragma头决定是否绕过缓存proxy_no_cache $http_pragma $http_authorization; # 在某些条件下不进行缓存proxy_cache_revalidate on; # 在使用过期的缓存前检查其在源服务器上是否已更新proxy_cache_min_uses 1; # 缓存条目至少被使用一次后才可被其他用户使用proxy_cache_lock on; # 防止并发请求时对同一资源的重复更新缓存proxy_cache_valid 200 302 1h; # 对HTTP状态码200和302的响应缓存1小时proxy_cache_valid 404 1m; # 对HTTP状态码404的响应缓存1分钟}}
}
在这个配置中可以参考https://juejin.cn/post/7112826654291918855
4.黑白名录剑指江湖 Nginx设置IP黑白名单的初衷主要是为了实现网络访问控制和增强安全性。这里就不举例了应该不管小白小黑的都懂吧。
白名单如友黑名单似敌一令封喉 Nginx的黑白名单功能是一种灵活且实用的网络安全策略它帮助管理员有效管理访问权限提升系统安全性同时也能优化资源利用和服务质量。 设置黑白名单的主要目的和好处 安全防护通过黑名单机制可以阻止已知恶意IP地址或有攻击行为的IP访问网站或应用从而减少DDoS攻击、恶意扫描、尝试入侵等安全威胁保护服务器资源和服务免受侵害。 访问权限管理白名单机制允许指定的IP或IP段访问特定内容或服务这对于内部系统、测试环境或付费会员专享内容非常有用。这样可以确保只有授权的用户或系统能够访问敏感数据或功能。 流量优化通过限制或优先处理某些IP的请求可以优化服务器资源的分配提高整体服务质量和响应速度。例如对于高价值客户或内部员工可以通过白名单给予更快的访问速度。 合规性要求某些行业或地区可能有特定的法规要求需要对访问者进行严格的访问控制。设置IP黑白名单可以帮助组织满足这些合规性要求。 故障排查和分析在遇到问题时通过临时设置黑名单或观察白名单访问日志可以辅助识别并隔离问题来源便于故障排查和分析网络行为。
门派准入安全之门Nginx的护山大阵 Nginx的黑白名单功能就像是一座山门严格筛选着进出的“江湖人士”确保了门派即网站或应用的安全与秩序。下面我将详细介绍如何通过Nginx配置实现这一“护山大阵”并解释为何它能成为一道有效的安全屏障。 黑名单设置假设我们要阻止特定的恶意IP地址访问我们的站点通过以下配置实现
http {# ...server {listen 80;server_name example.com;# 黑名单设置deny 192.168.1.10; # 禁止此IP访问deny 10.0.0.0/8; # 禁止整个IP段访问# 允许所有其他未明确禁止的IPallow all;location / {# ... 其他location配置}}
}
deny指令用于定义黑名单可以直接指定单个IP地址或使用CIDR表示法指定一个IP段。allow all;放置在deny规则之后意味着除了黑名单中的IP其他所有IP都允许访问。 白名单设置如果我们希望只允许特定IP或IP段访问采取白名单策略
http {# ...server {listen 80;server_name example.com;# 白名单设置allow 192.168.1.0/24; # 允许此IP段访问allow 10.0.0.5; # 允许此单独IP访问# 拒绝所有不在白名单中的IPdeny all;location / {# ... 其他location配置}}
}
使用allow指令来定义白名单。deny all;放在allow规则之后意味着除了白名单中的IP其他所有IP都将被拒绝访问。
精确控制访问通过精细的IP控制Nginx能够有效阻止恶意访问如自动化扫描工具、已知攻击源等减少了安全威胁。资源保护限制不必要的访问可以减少服务器负载保护带宽资源提升服务稳定性。策略灵活性黑白名单策略可根据需要随时调整适应不同的安全策略和业务场景变化。简单易部署只需简单的配置即可实现强大的访问控制功能无需复杂的第三方安全解决方案。
5.跨界之谜CORS解咒
跨域之禁如同武林禁地 跨域是指在浏览器中当一个网页的源origin与另一个网页加载资源的源不一致时就会发生跨域问题。这种情况下浏览器会限制页面中的脚本或资源与不同源的服务器进行交互以防止恶意行为。 想象一下苦逼程序猿凯叔在一家伟大的公司卖命公司的几十个妹子再追求凯叔但是凯叔在另一个部门工作不在同一个圈子里。妹子想要约凯叔出去但由于不在同一个部门他无法直接接触到凯叔这就叫跨域解决跨域就需要通过一些中间人或方法来实现。 CORSCross-Origin Resource Sharing是一种用于解决跨域资源访问限制的机制。它允许在浏览器中运行的Web应用程序从不同源域、协议或端口的服务器请求资源即允许跨域访问。CORS通过在HTTP头部中使用特定的标记来告知浏览器是否允许跨域请求从而实现跨域资源共享。 简单来说CORS允许网页服务器在响应中设置一个许可控制的HTTP头部从而让浏览器知道该网页是否允许被跨域访问。这样就能够解决浏览器的同源策略对跨域资源请求的限制实现安全可控的跨域访问。 了解了机理那么跨域问题的核心起因在于浏览器实施的“同源策略”这一安全原则旨在守护用户信息的安全边界防范恶意网站非法获取数据。简言之“同源”定义为请求的协议、域名及端口号完全一致若三者中任一要素不匹配则视为跨域请求此时同源策略将介入限制不同源之间的直接资源访问与交互以避免潜在的隐私泄露风险。 特别地考虑到HTTP协议本身无状态特性网站通常利用Cookie保存用户会话、身份验证等敏感信息确保用户在不同页面间浏览时能保持登录状态或个性化设置。若不对跨域访问加以限制Cookie可能在用户不知情的情况下被第三方网站非法读取从而危及用户的个人数据安全比如账户密码等关键信息的泄露。因此坚持执行同源策略不仅是维护Web生态安全的基石也是保障用户隐私权益的必要措施。
Nginx一令破除界限共筑和谐江湖 了解了跨域问题接下来就是nginx发挥作用的时候了nginx如何配置才能让凯叔和妹子共筑和谐社会。
http {# ...server {listen 80;server_name your.domain.com; # 替换为你的域名# 定义一个location来处理需要跨域的请求location /api { # 假设所有/api开头的请求需要跨域处理# 设置代理将请求转发到后端服务器proxy_pass http://your_backend_service:3000; # 替换为后端服务器地址和端口# 解决跨域问题添加必要的响应头add_header Access-Control-Allow-Origin *; # 允许所有源进行跨域请求也可以指定具体的源如http://example.comadd_header Access-Control-Allow-Methods GET, POST, OPTIONS, PUT, DELETE; # 允许的HTTP方法add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type; # 允许的请求头add_header Access-Control-Expose-Headers Content-Length,Content-Range; # 暴露给外部的响应头add_header Access-Control-Allow-Credentials true; # 如果需要携带cookie设置为true但注意这会使某些浏览器的预检请求OPTIONS失败除非后端也正确设置了此头# 处理预检请求OPTIONS请求if ($request_method OPTIONS) {add_header Access-Control-Max-Age 1728000; # 预检请求的有效期单位为秒add_header Content-Type text/plain; charsetutf-8;add_header Content-Length 0;return 204; # 立即结束请求不返回任何内容}}}
}
listen 80; 指定Nginx监听的端口这里为默认的HTTP端口80。server_name your.domain.com; 配置你的域名。location /api { ... } 定义了一个location块来匹配所有以/api开头的请求路径。proxy_pass http://your_backend_service:3000; 设置反向代理将请求转发到后端服务器。add_header 指令用于添加HTTP响应头解决跨域问题的关键在于设置正确的Access-Control-Allow-Origin、Access-Control-Allow-Methods等头。特别地对于需要携带Cookie的跨域请求需要设置Access-Control-Allow-Credentials为true并且后端也需要配置相应的响应头来配合。if ($request_method OPTIONS) {...} 这部分是为了处理预检请求OPTIONS请求这是一种安全机制浏览器在实际发送跨域请求前会先发送一个OPTIONS请求来确认服务器是否支持跨域。 面对分布式架构中的后端RPC调用确保跨域访问的顺畅同样至关重要。为了解决这一挑战你可以在后端项目中采取以下策略优化跨域配置 自定义拦截器Interceptor通过继承HandlerInterceptorAdapter类或直接实现HandlerInterceptor接口针对较新版本的Spring框架你可以定制化处理跨域请求。在拦截器中添加必要的响应头以允许跨域访问实现细粒度的控制。 全局配置WebMvcConfigurer实现WebMvcConfigurer接口并重写addCorsMappings方法为整个应用提供一套统一的跨域策略。这种方式有利于简化配置避免在每个控制器或方法上重复添加跨域注解。 利用CrossOrigin注解对于特定的控制器或方法直接使用CrossOrigin注解来开启跨域支持这是一种更为简便且针对性的方法。虽然不如前两者灵活但对于快速解决局部跨域需求非常有效。
6.巨刃传书不动如山
大文件传输考验耐心与实力 在一个阳光明媚的春日午后苦逼程序猿开始卖着老命在一个伟大的公司辛勤的工作就在此时公司里的妹子们正苦恼于一个棘手的问题她们精心制作的产品演示视频文件过大每当试图通过公司内部平台分享给团队成员尤其是那位总是埋头代码、沉默寡言的程序员凯叔时浏览器总是无情地提示传输失败。这不仅让妹子们的工作进度受阻也让本就紧张的项目期限雪上加霜。 妹子们为了进一步拉近与凯叔的距离。她们开始研究如何优化大文件传输却意外发现公司使用的Nginx服务器正是解决这个问题的关键。 在一番深入交流后凯叔通过调整了Nginx的配置增加了client_max_body_size的值确保服务器能接受更大的文件。同时她还启用了HTTP/2利用其多路复用特性提高文件传输效率。为了增强用户体验她甚至提议采用前端分片上传方案让大文件分割成小块逐步上传即使网络偶有波动也不至于前功尽弃。 当一切准备就绪妹子们满怀期待地再次尝试上传视频文件这次奇迹发生了文件顺利上传没有出现任何中断。她们迫不及待地将成功的好消息和优化心得通过内网邮件分享给了所有人当然还有那位英俊潇洒气宇轩昂头顶没毛的凯叔。凯叔收到邮件心中暗暗佩服自己咋这么牛逼。但是针对上传大文件也提出了一些进一步优化的建议就这样围绕技术话题又进一步的深入交流。 最终这段由一个大文件传输问题牵起的缘分让技术与艺术完美融合成就了一段美好的佳话。 浏览器大文件传输主要面临以下问题
网络不稳定长时段的文件传输过程中网络波动可能导致传输中断尤其是在移动网络或不稳定网络环境下。浏览器限制浏览器对上传文件大小有所限制不同浏览器限制不同可能会阻止大文件的上传。服务器限制服务器端如Nginx也可能对上传文件大小有默认限制导致大文件上传被拒绝。资源占用大文件上传会占用较多的客户端和服务器资源可能影响其他服务性能。上传超时长时间的文件上传可能导致HTTP请求超时。用户体验上传大文件时用户等待时间较长可能造成用户体验不佳。
Nginx为解决大文件传输问题提供了以下策略 1.调整配置参数 client_max_body_size通过修改此参数增加允许上传的最大文件大小。例如client_max_body_size 1000m;允许上传最大为1GB的文件。 超时时间调整增加client_header_timeout, client_body_timeout, proxy_connect_timeout, proxy_read_timeout, 和 proxy_send_timeout等超时时间设置以适应大文件传输所需的更长时间。 2.分块上传虽然HTTP协议本身支持文件分块上传但Nginx可以通过与前端应用配合实现更精细化的分片上传和断点续传功能。前端将大文件分割成多个小块逐一上传Nginx在服务器端负责接收并合并这些文件块确保网络中断后可以从断点继续上传提高传输可靠性。 3.缓存优化优化缓存策略减少因缓存问题导致的上传失败特别是在上传过程中需要多次请求验证或交互的场景。 4.使用HTTP/2或HTTP/3支持HTTP/2或HTTP/3协议它们在多路复用、流控制等方面的优势有助于提升大文件传输的效率和稳定性。 5.负载均衡在分布式系统中Nginx作为负载均衡器可以将大文件上传请求分配给多个后端服务器分散单个服务器的压力提升整体处理能力。
Nginx持重分段传输稳如磐石 在Nginx中解决大文件传输问题特别是实现分片传输主要是通过调整Nginx的配置参数来优化文件上传的限制条件并确保客户端与服务器之间的稳定通信。虽然Nginx本身并不直接支持前端的文件分片上传逻辑这部分通常由前端应用实现但它的配置可以很好地支持和配合这种分片上传的机制。以下是如何配置Nginx以支持大文件分片上传的步骤
1. 调整文件大小限制
调整Nginx允许接收的请求体大小以适应大文件上传的需求。
http {client_max_body_size 1000m; # 设置最大上传文件大小为1GB
}
2. 设置超时时间
为了避免上传大文件时因超时而导致的失败适当增加超时时间参数。
http {client_body_timeout 600s; # 请求体读取超时时间设置为600秒client_header_timeout 600s; # 请求头读取超时时间proxy_read_timeout 600s; # 代理读取超时时间proxy_send_timeout 600s; # 代理发送超时时间
}
3. 开启高效文件传输模式
对于文件传输确保sendfile指令设置得当。
http {sendfile on; # 开启高效文件传输模式
}
4. 配合前端分片上传
虽然Nginx配置本身不涉及分片上传的具体实现但需确保Nginx能够正确接收和处理前端分片上传的请求。前端应用需要负责将大文件分割成多个小块每个小块独立上传并在服务器端进行重组。
PS
分片上传的逻辑需要客户端如JavaScript实现将文件切分为多个片段并为每个片段发起独立的POST请求通常包含一个标识符来指示属于哪个文件以及是文件的哪一部分。服务器端如后端应用需要能够识别这些分片存储它们并在所有分片上传完成后将它们合并成原始文件。 Nginx通过调整上述配置为大文件分片上传提供了基础支持而实际的分片上传逻辑则需要前端与后端应用程序共同协作完成。确保Nginx配置与前端、后端的分片上传逻辑相匹配是实现大文件稳定上传的关键。 7.防盗链锁独步武林 Nginx的防盗链锁是一种安全机制用于防止恶意用户盗用网站资源。通过配置Nginx服务器管理员可以限制只有特定来源的请求才能访问网站资源其他来源的请求将被拒绝访问。这样可以防止其他网站盗用资源减少带宽消耗和保护网站内容的安全性。
独门秘技防盗链术守卫珍稀资源 Nginx的防盗链功能是保护网站资源免遭未经授权的第三方盗用的一门“独门秘技”。这项技术通过检查HTTP请求头中的“Referer”字段判断请求是否源自站内进而决定是否允许访问资源以此来防止他人直接链接到你的图片、视频等静态资源减少了流量消耗保护了版权和服务器资源。工作机理如下 检查Referer头当用户从一个网页点击链接到另一个网页时浏览器会在请求中自动附带原网页的URL这个信息储存在HTTP头部的“Referer”字段中。Nginx通过分析这个字段来判断请求来源。 配置规则在Nginx的配置文件中可以设置基于Referer的访问控制规则。如果请求的Referer与预期不符即不是来自你信任的域名Nginx可以拒绝提供资源返回错误码或重定向到其他页面。 白名单/黑名单你可以设置白名单只允许特定Referer访问、黑名单禁止某些Referer访问或者更复杂的规则逻辑以适应不同的安全需求。
nginx的防盗链锁的作用如下
节约流量成本避免其他网站直接链接你的资源从而消耗你的服务器带宽。版权保护确保你的图片、视频等内容不会被随意嵌入到第三方网站保护知识产权。提升安全性防止恶意网站通过链接你的资源来进行钓鱼攻击或其他形式的网络安全威胁。增强用户体验通过重定向或自定义错误页面引导用户正确访问你的网站维护品牌形象。
一链一锁让盗者望而却步 Nginx防盗链功能的详细配置涉及对特定location块的定制以便检查HTTP请求中的Referer头信息从而决定是否允许该请求访问静态资源。下面是一个更详细的配置示例包括了白名单设置、错误处理、以及可选的复杂逻辑比如基于特定条件的动态Referer检查。
基础配置
server {listen 80;server_name yoursite.com;location /protected/ {# 设置防盗链检查valid_referers none blocked yoursite.com *.yoursite.com subdomain.yoursite.com;# none 表示直接访问无Referer的情况blocked是指Referer被禁用或被篡改# 指定允许的Referer可以是确切的域名、子域名或使用通配符# 如果Referer不在允许列表中if ($invalid_referer) {# 返回403 Forbidden错误return 403;# 或者重定向到错误页面# return 302 http://yoursite.com/forbidden.html;}# 正常处理请求指向资源所在目录root /var/www/your-site/htdocs;index index.html index.htm;}
}
高级配置 在某些场景下可能需要更灵活的Referer检查逻辑比如根据请求的其他条件动态调整。Nginx的map模块可以用来实现更复杂的逻辑判断
http {map $http_referer $trusted_referer {default 0;~^(https?://)?(www\.)?yoursite\.com(/|$) 1;~^(https?://)?subdomain\.yoursite\.com(/|$) 1;# 更多匹配规则...}server {listen 80;server_name yoursite.com;location /protected-dynamic/ {# 使用map定义的$trusted_referer变量if ($trusted_referer 0) {return 403;}root /var/www/your-site/advanced-htdocs;index index.html index.htm;}}
} 在这个例子中map指令在http块中定义用于预先计算Referer是否可信。然后在location块中通过比较$trusted_referer变量的值来决定是否允许访问。还需要注意以下几点
精确匹配与安全配置Referer白名单时确保正则表达式精确避免误伤或被恶意绕过。性能考量防盗链检查会增加Nginx处理请求的开销尤其是在高并发场景下应考虑性能影响。兼容性部分旧版浏览器或特殊情况可能不发送Referer需评估是否允许此类访问。
8.HTTPS金钟罩固若金汤 HTTPS的产生主要是为了加强网络通信的安全性。在HTTP协议中数据是以明文形式传输的容易被窃取和篡改因此引入了HTTPS协议来加密数据传输保护用户隐私和数据安全。HTTPS使用SSL/TLS协议对数据进行加密确保数据在传输过程中不被窪窃取或篡改。HTTPS还可以验证服务器的身份防止中间人攻击提高网络通信的安全性。HTTPS的普及使得网络通信更加安全可靠成为现代互联网通信的标准。
SSL证书加密之钥金钟罩铁布衫
随着HTTPS的广泛采纳Nginx配置已拓展至支持加密通信要求对443端口的HTTPS请求进行监听。为确保数据传输安全无虞整合SSL证书成为Nginx网关配置的必备环节。以下是简明的SSL配置指南 证书获取首要步骤是从权威CA机构或云服务提供商获取专为Nginx设计的SSL证书。完成审核流程后下载包括.crt(或等效的PEM格式证书)、.key(服务器私钥)在内的必要文件。 .crt代表证书实体的数字证明偶尔以.pem格式呈现。.key存储服务器私钥用于解密由公钥加密的数据确保数据安全。.pem一种通用的编码格式文件可能包含证书、私钥或两者根据情况可调整扩展名。 证书部署在Nginx安装根目录下新建一个certificates文件夹将下载的所有证书文件移至此处。此举便于管理并确保Nginx能够无缝访问这些关键安全组件。
Nginx铸盾安全之路光明正大 应用SSL证书至Nginx服务器具有极其重要的意义主要体现在以下几个方面
数据加密SSL证书通过TLS/SSL协议为客户端与服务器间的通信提供加密确保传输的数据如登录凭证、敏感信息等不被第三方窃取或篡改保护用户隐私和数据安全。身份验证CA颁发的SSL证书能验证网站的真实身份帮助用户识别假冒网站增强信任度和品牌信誉。SEO优化搜索引擎如Google倾向于优先展示已启用HTTPS的网站使用SSL证书有助于提升搜索排名。合规性许多法律法规和行业标准要求网站采用HTTPS特别是涉及到个人信息处理的场景。
server {listen 443 ssl; # 监听443端口开启SSLserver_name your_domain.com www.your_domain.com; # 替换为你的域名# SSL证书和私钥的路径ssl_certificate /etc/nginx/ssl/your_domain.crt; # 证书文件路径ssl_certificate_key /etc/nginx/ssl/your_domain.key; # 私钥文件路径# SSL/TLS协议和密码套件配置推荐使用更安全的选项ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;ssl_prefer_server_ciphers on;# 其他配置如访问控制、代理转发等# HTTP重定向到HTTPS如果需要if ($scheme ! https) {return 301 https://$host$request_uri;}# 你的location块和其他配置location / {# ...}
}# 可选如果你同时运行HTTP服务可以配置一个简单的重定向
server {listen 80;server_name your_domain.com www.your_domain.com;return 301 https://$host$request_uri;
} ssl_certificate和ssl_certificate_key指令分别指定了SSL证书和私钥的路径。ssl_protocols配置了支持的SSL/TLS协议版本推荐至少使用TLSv1.2以保证安全性。ssl_ciphers定义了支持的密码套件选择安全且高效的组合是关键。ssl_prefer_server_ciphers设为on表示优先使用服务器端首选的密码套件。
完成配置后测试Nginx配置文件的语法是否正确使用nginx -t命令然后重新加载或重启Nginx服务systemctl reload nginx或service nginx restart即可使SSL配置生效 未完待续