卡卷网
当前位置:卡卷网 / 每日看点 / 正文

nginx如何快速入门?

作者:卡卷网发布时间:2025-01-10 19:19浏览数量:80次评论数量:0次

<>号主:老杨丨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; } }

<>启用配置并重启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; } }

<>启用配置并重启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; } }

    listen443ssl;:S端口443。ssl_certificate和ssl_certificate_key:指定SSL证书和私钥路径。ssl_protocols和ssl_ciphers:设置支持的SSL协议版本和加密套件,确保使用强加密算法。

<>自动更新证书

对于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

    proxy_cache_path:定义缓存存储路径、层级结构、键空间名称、最大大小和失效时间等参数。

<>配置缓存规则

接下来,在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年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码