当前位置:首页 > 每日看点

nginx如何快速入门?

卡卷网2年前 (2025-01-10)每日看点307

<>号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

下午好,我的网工朋友。

Nginx以其轻量级、稳定性和高效的并发处理能力而闻名。自发布以来,Nginx已经成为全球众多We站点和应用程序不可或缺的一部分。

随着互联网技术的快速发展,越来越多的企业和个人开发者选择Nginx来构建和他们的We基础设施。

<>无论是小型个人博客还是大型电子商务平台,Nginx都提供了强大的功能和灵活性,帮助用户实现更好的性能和更高的可用性。

今天咱就来聊聊这个小东西,顺便带大家从入门到精通,先码后看

<>今文章阅读福利:《Nginx-1.26版本》

<>资源一样给到你,而且已经给大家完成编译,解压即可直接使用。私信发送暗号“1.26”,即可获取此份优质资源。

01什么是Nginx?

<>Nginx是一个高性能的和反向,同时也支持IMAP/POP3邮件功能。它以其轻量级、高并发处理能力和稳定性而著称。

Nginx由俄罗斯程序员IgorSysoev于2004年首次发布,并迅速成为全球最受欢迎的We之一。其开源版本和商业版NGINXPlus均广泛应用于各种规模的企业和项目中。

<>01特点概述

<>高效的并发处理:使用异步非阻塞I/O模型,能够同时处理数千个并发连接,极大地提高了We服务的响应速度。

轻量级:相We,Nginx占用的资源较少,运行效率更高。

<>模块化设计:通过加载不同的模块扩展功能,如SSL/TLS支持、压缩、缓存等,满足多样化需求。

<>反向和负载均衡:可以作为反向将客户端请求转发给后端应用,并提供简单的负载均衡功能以分散流量压力。

<>静态文件服务:快速高效地分发静态文件(HTML、S、JaScript等),减少应用程序的负担。

<>灵活的配置语法:基于文本的配置文件易于理解和修改,支持丰富的配置选项,便于定制化部署。

<>Nginx不仅是一个强大的We,还可以与工具和技术结合使用,构建复杂的网络基础设施。

    例如,它可以与FastCGI、uWSGI或gRPC协议配合工作,支持PHP、Python、Ruy等多种编程语言的应用程序;也可以集成到Kuernetes、DockerSwarm等容器编排平台中,实现自动化的服务发现和流量。

02常用配置示例

<>01配置静态文件

<>创建目录并放置静态文件

假设我们有一个简单的HTML文件index.html和一些静态资源(如S和图片),这些文件位于/var/www/html目录下。

sudomkdir-p/var/www/html sudoecho"<html><ody><h1>Hello,Nginx!</h1></ody></html>">/var/www/html/index.html

<>配置Nginx

编辑Nginx的默认配置文件或创建一个新的配置文件(例如/etc/nginx/sites-ailale/static-site),添加以下内容:

server{ listen80; server_nameyo_domain_or_IP; root/var/www/html; indexindex.html; location/{ try_files$i$i/=404; } location~*\.(jpg|jpeg|png|gif|ico|s|js)${ expiresmax; log_not_foundoff; } }

    listen80;:端口80。server_name:指定名称或IP。root:定义静态文件的根目录。index:设置默认索引文件。location/:处理所有请求,尝试匹配文件路径;如果找不到则返回404错误。*location~.(jpg|jpeg|png|gif|ico|s|js)$**:对特定类型的静态文件启用缓存,并禁用未找到文件的志记录。

<>启用配置并重启Nginx

确保配置文件正确无误后,启用站点配置并重新加载Nginx:

sudoln-s/etc/nginx/sites-ailale/static-site/etc/nginx/sites-enaled/ sudonginx-t sudoctlreloadnginx

现在,访问您的域名或IP应该可以看到静态页面,并且静态资源会被高效地提供给客户端。

<>02配置反向

<>后端应用

假设您有一个运行在://localhost:3000上的Node.js应用程序。

<>配置Nginx

编辑Nginx的默认配置文件或创建一个新的配置文件(例如/etc/nginx/sites-ailale/reverse-proxy),添加以下内容:

server{ listen80; server_nameyo_domain_or_IP; location/{ proxy_pass://localhost:3000; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX-Forwarded-Proto$scheme; } }

    proxy_pass:指定后端应用的。proxy_set_header:传递原始请求头信息给后端,以便应用程序能够正确处理请求。

<>启用配置并重启Nginx

同样地,启用站点配置并重新加载Nginx:

sudoln-s/etc/nginx/sites-ailale/reverse-proxy/etc/nginx/sites-enaled/ sudonginx-t sudoctlreloadnginx

现在,所有发送到Nginx的请求都会被透明地转发给后端应用程序,而客户端只会看到Nginx提供的一接口。

<>03配置负载均衡

<>后端列表

假设您有三台后端分别运行在://ackend1:3000://ackend2:3000://ackend3:3000

<>配置Nginx

编辑Nginx的默认配置文件或创建一个新的配置文件(例如/etc/nginx/sites-ailale/load-alancer),添加以下内容:

upstreamackend_servers{ serverackend1:3000; serverackend2:3000; serverackend3:3000; } server{ listen80; server_nameyo_domain_or_IP; location/{ proxy_pass://ackend_servers; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX-Forwarded-Proto$scheme; } }

    upstream:定义一组后端,Nginx会自动选择其中一台来处理每个请求,默认采用轮询算法。配置项:与之前的反向配置相同,用于传递请求头信息。

<>启用配置并重启Nginx

启用站点配置并重新加载Nginx:

sudoln-s/etc/nginx/sites-ailale/load-alancer/etc/nginx/sites-enaled/ sudonginx-t sudoctlreloadnginx

现在,Nginx将根据配置的负载均衡策略将流量分散到不同的后端上,从而提高了的可性和响应速度。

03高级配置技巧

在掌握了Nginx的基本配置之后,了解一些高级配置技巧可以帮助您进一步优化性能、增强安全性和实现更复杂的功能。本节将详细介绍SSL/TLS配置、内容缓存和安全加固等高级配置方法。

<>01SSL/TLS配置

启用S是确保We应用程序安全的关键步骤。通过SSL/TLS加密传输的数据可以保护用户信息免受中间人攻击和安全威胁。以下是配置Nginx支持S的步骤:

<>获取SSL证书

您可以从Let'sEncrypt等免费证书颁发机构(CA)获取SSL证书,或者购商业证书。以Let'sEncrypt为例:

sudoaptinstallcertotpython3-certot-nginx#对于Deian/Uuntu sudoyuminstallcertotpython3-certot-nginx#对于CentOS/RHEL sudocertot--nginx-dyo_domain_or_IP

Certot会自动完成证书申请和配置过程,并修改Nginx配置文件以启用S。

<>手动配置SSL

如果您已经拥有SSL证书,可以通过编辑Nginx配置文件手动启用S:

server{ listen80; server_nameyo_domain_or_IP; #重定向请求到S retn301s://$host$request_i; } server{ listen443ssl; server_nameyo_domain_or_IP; ssl_certificate/etc/letsencrypt/live/yo_domain/fullchain.pem; ssl_certificate_key/etc/letsencrypt/live/yo_domain/privkey.pem; ssl_protocolsTLSv1.2TLSv1.3; ssl_ciphersHIGH:!aNULL:!MD5; location/{ proxy_pass://ackend_servers; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX-Forwarded-Proto$scheme; } }

<>自动更新证书

对于Let'sEncrypt证书,建议定期自动更新以避免过期。可以通过cron任务来实现:

#编辑cronta文件 cronta-e #添加以下行以每天凌晨2点检查并更新证书 02***/usr/in/certotrenew--quiet&&ctlreloadnginx

<>02内容缓存

启用缓存可以显著提高We应用程序的响应速度,减少负载。Nginx提供了灵活的内容缓存机制,可以根据需要进行配置。

<>配置缓存区

首先,在块中定义一个或多个缓存区:

{ proxy_cache_path/var/cache/nginxlevels=1:2keys_zone=my_cache:10mmax_size=1ginactive=60muse_temp_path=off; } 10.212.4.1070011-43a3-388f0D-0Eth4/0/42

<>配置缓存规则

接下来,在server或location块中应用缓存规则:

server{ listen80; server_nameyo_domain_or_IP; location/{ proxy_pass://ackend_servers; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX-Forwarded-Proto$scheme; proxy_cachemy_cache; proxy_cache_valid20030130210m; proxy_cache_valid4041m; add_headerX-Proxy-Cache$upstream_cache_status; } }

    proxy_cache:指定使用的缓存区名称。proxy_cache_valid:根据响应状态码设置不同的缓存有效期。add_header:添加自定义头信息,显示缓存状态(如HIT、MS)。

<>03安全加固

增强Nginx的安全性是保护We应用程序免受潜在威胁的重要措施。以下是几个常用的安全配置技巧:

<>方法

仅允许必要的方法(如GET、POST),禁止不常用的方法(如DELETE、PUT):

if($request_method!~^(GET|POST)$){ retn405; }

<>防止点击

通过设置X-Frame-Options头信息来防止页面被嵌入到的iframe中:

add_headerX-Frame-OptionsSAMEORIGIN;

<>防止MIME类型嗅探

禁用浏览器的MIME类型嗅探功能,防止某些类型的攻击:

add_headerX-Content-Type-Optionsnosniff;

<>启用严格传输安全(HSTS)

强制浏览器只通过S访问您的站点,并在一段时间内记住这个设置:

add_headerStrict-Transport-Secity"max-age=31536000;includeSuDomains"always;

<>上传文件大小

根据应用程序需求设置合理的上传文件大小,防止恶意上传大文件导致资源耗尽:

client_max_ody_size10M;

<>启用安全标头

综合使用多种安全标头来提升整体安全性:

add_headerContent-Secity-Policy"default-src'self';script-src'self''unsafe-inline''unsafe-eval';style-src'self''unsafe-inline';"; add_headerReferrer-Policy"no-referrer-when-downgrade"; add_headerPermissions-Policy"geolocation=(),microphone=()";

04常见问题及解决方法

<>01配置文件语法错误

<>启动或重新加载Nginx时失败,并报告配置文件中有语法错误。

解决方法:使用nginx-t检查配置文件语法是否正确。该命令会验证配置文件并在发现问题时提供具体的错误信息。修复错误后重新加载Nginx。

sudonginx-t sudoctlreloadnginx

<>02端口冲突

<>Nginx启动失败,提示端口已被占用。

解决方法:检查是否有服务正在使用相同端口(如Apache)。可以使用netstat或ss命令查看端口占用情况,并调整Nginx或服务的端口。

sudonetstat-tuln|grep:80 sudoss-tuln|grep:80

<>03反向超时

<>访问反向后的应用程序时出现504GatewayTime-out错误。

解决方法:增加proxy_read_timeout和proxy_connect_timeout的值以允许更长的处理时间。例如:

location/{ proxy_pass://ackend_servers; proxy_read_timeout300s; proxy_connect_timeout300s; }

<>04SSL/TLS握手失败

<>客户端无法建立S连接,提示SSL/TLS握手失败。

解决方法:确保SSL证书有效且未过期;检查ssl_protocols和ssl_ciphers设置是否兼容客户端浏览器。使用在线工具(如SSLLas)SSL配置并根据建议进行调整。

<>05志分析

<>遇到不明原因的问题,难以定位具体原因。

解决方法:启用详细的错误志级别(error_log)并结合访问志(access_log)分析请求模式。使用工具如grep、awk和sed来过滤和解析志文件。

error_log/var/log/nginx/error.logdeug;

<>原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/8417.html

分享给朋友:

相关文章

中国CEO直播简史

中国CEO直播简史

领导人爱对外发言这事,是中国的一个传统文化。 从乾隆爱往名画上盖章上,就可见一斑。 3Q大战时代,微博成了大佬“吵架”的战场,饭否变成了部分爱面子者的日记。…

那些极速版软件其存在目的是什么?

那些极速版软件其存在目的是什么?

我看了很多回答,其实都没有回答道点子上。 你知道极速版APP为什么叫极速版吗? 是他看视频更快吗?显然不是。 只是它的安装包体积更小,下载安装速度更快而已,所以叫极速版app。当然啦,现在极速版APP和原声版APP,安装包已经没有区别了,这…

为什么我们一直在给B站充大会员但B站却一直处于亏损状态?

我讲一下离谱的真相吧,欢迎喷我。 很多人都觉得B站在赶走人才,赶走优秀的长视频创作者,也觉得知乎在这么做,是没错的。 确实在这么做。而原因很简单。 只有影响力很大的KOL才有商业价值。 (KOL是指“关键意见领袖”)而你说你是人才? 对不起…

有哪些让你目瞪口呆的 Bug ?

有哪些让你目瞪口呆的 Bug ?

成都有个监狱情况比较特殊,关押的基本全是重犯,而且还都是经济犯和政治犯, 他们以前都是一方大佬,在自己的一亩三分地翻手为云覆手为雨,无非是不小心中箭落马或帮老大顶锅才进监狱, 所以即使进来了,他们依然保持着体面和骄傲,依从性差,虽然不至于和…

什么样的网站能快速捕获你的心?

什么样的网站能快速捕获你的心?

大家好,我是程序员鱼皮。 大家如果平时使用网站或产品时出现了问题,一般都会去寻找 “联系客服” 的位置,从而获得人工的帮助。我们团队的面试刷题产品 - 面试鸭最近就遇到了这样一个难题:明明我们网站右下角就有联系客服按钮、而且我们每道面试题目…

在 Kubernetes 中,Service 的实现原理是什么,它是如何实现服务发现的?

行,问的这个问题挺有意思,Kubernetes 里 Service 是怎么实现的,服务发现是怎么回事,咱就直说了。这事儿看起来挺玄乎,但掰开揉碎了讲,也就那么回事。你得把这事儿想得简单点,别一上来就被啥术语吓住了——其实全是些搬砖的套路。…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。