平凉市住房和城乡建设厅网站,协同开发平台,网店html模板,网站的动画广告横幅怎么做的一、Nginx 介绍
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件#xff08;IMAP/POP3#xff09;代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发#xff0c;自 2004 年发布以来#xff0c;凭借其高性能、低内存消耗、高并发处理能力等特点#xf…一、Nginx 介绍
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件IMAP/POP3代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发自 2004 年发布以来凭借其高性能、低内存消耗、高并发处理能力等特点迅速在 Web 服务器领域崭露头角。Nginx 可以高效地处理静态资源如 HTML、CSS、JavaScript 文件和图片等同时通过反向代理功能将客户端请求转发到后端的应用服务器实现负载均衡提高整个系统的可用性和性能。它广泛应用于各类大型网站、高流量应用以及云服务平台等场景。
二、Nginx 配置基础
一配置文件结构剖析
Nginx 的配置文件通常为nginx.conf其结构清晰主要由以下几个部分组成
全局块从配置文件开始到events块之间的部分用于设置一些影响 Nginx 全局运行的指令如运行用户、工作进程数等。
events 块主要用于配置 Nginx 的网络连接相关的事件处理如选择事件驱动模型、设置每个工作进程的最大连接数等。
http 块这是 Nginx 配置中最为核心的部分用于配置 HTTP 服务器相关的参数如文件类型映射、日志记录、gzip 压缩等。在http块中还可以包含多个server块。
server 块每个server块代表一个虚拟主机用于配置特定网站或应用的相关参数如监听端口、服务器名称、访问日志等。在server块中又可以包含多个location块。
location 块用于匹配特定的 URL 路径并对其进行相应的配置如设置根目录、代理转发等。
二常用配置指令详解
全局配置指令
user指定 Nginx 工作进程运行的用户和用户组例如user nginx nginx;以确保服务器的安全性。
worker_processes设置 Nginx 的工作进程数一般建议设置为与服务器 CPU 核心数相同以充分利用 CPU 资源如worker_processes pid指定 Nginx 进程 ID 文件的路径方便管理和监控 Nginx 进程如pid /var/run/nginx.pid;。
error_log设置错误日志的路径和级别有助于排查服务器运行过程中出现的问题如error_log /var/log/nginx/error.log warn;。 事件配置指令
use选择 Nginx 的事件驱动模型常见的有epoll适用于 Linux 系统、kqueue适用于 FreeBSD 等系统等如use epoll;以提高服务器的性能。
worker_connections设置每个工作进程能够处理的最大连接数结合服务器性能和业务需求合理设置如worker_connections 1024;。
accept_mutex开启或关闭 Nginx 的 “接受锁”防止多个工作进程同时接受新连接时可能出现的 “惊群” 现象默认开启如accept_mutex on;。 HTTP 配置指令
include用于包含其他配置文件方便管理和维护如include /etc/nginx/mime.types;引入文件类型映射表。
default_type设置默认的 MIME 类型当服务器无法识别文件类型时使用如default_type application/octet-stream;。
sendfile开启高效的文件传输模式减少磁盘 I/O 开销提高文件传输效率如sendfile on;。
keepalive_timeout设置客户端与服务器之间的长连接超时时间如keepalive_timeout 65;。
gzip开启 gzip 压缩功能减少数据传输量提高网站访问速度如gzip on;并可进一步配置压缩级别等参数。 Server 配置指令
listen指定服务器监听的端口如listen 80;监听 HTTP 协议的 80 端口。
server_name设置服务器的名称可以是域名或 IP 地址如server_name example.com;。
access_log指定访问日志的路径和格式用于记录客户端的访问信息如access_log /var/log/nginx/access.log main;。
error_log在server块中设置的错误日志仅记录当前虚拟主机相关的错误信息覆盖http块中的全局错误日志设置。 Location 配置指令
匹配规则location通过不同的匹配符号来确定匹配规则。例如表示精确匹配~表示区分大小写的正则表达式匹配~*表示不区分大小写的正则表达式匹配^~表示普通字符串匹配且一旦匹配成功不再进行其他正则表达式匹配。
常用指令 root设置请求的根目录如root /usr/share/nginx/html;当访问/路径时会从该目录下查找对应的文件。 alias用于替换路径与root略有不同如alias /data/www/;可以将特定的 URL 路径映射到不同的文件目录。 proxy_pass实现代理转发功能将匹配的请求转发到后端服务器如proxy_pass http://backend_server;。
三、Nginx 进阶配置实例
一反向代理配置
假设我们有一个后端应用服务器运行在www.rhihi.com:8080希望通过 Nginx 将对example.com的请求转发到该后端服务器。配置如下
server {listen 80;server_name example.com;location / {proxy_pass http://www.rhihi.com:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
在上述配置中proxy_pass指令将请求转发到http://www.rhihi.com:8080同时通过proxy_set_header指令设置了一些请求头信息以便后端服务器能够正确处理请求。
二负载均衡配置
假设有三个后端服务器backend1、backend2、backend3分别运行在192.168.1.10:80、192.168.1.11:80、192.168.1.12:80我们使用 Nginx 的轮询负载均衡策略将请求分发到这三个服务器上。配置如下
upstream backend_servers {server 192.168.1.10:80;server 192.168.1.11:80;server 192.168.1.12:80;}server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
这里通过upstream指令定义了后端服务器集群Nginx 会按照轮询的方式依次将请求分发到各个后端服务器上。
三动静分离配置
为了提高网站性能我们将静态资源如图片、CSS、JavaScript 文件和动态请求如 PHP、Python 等应用程序的请求分开处理。假设静态资源存放在/var/www/static目录下动态请求由后端的 FastCGI 服务器处理。配置如下
server {listen 80;server_name example.com;location /static/ {root /var/www/;expires 30d;access_log off;}location / {fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;include fastcgi_params;}}
在上述配置中/static/路径下的请求会被 Nginx 直接从/var/www/static目录中读取静态资源并设置了缓存过期时间为 30 天同时关闭了该路径的访问日志。而其他请求则通过fastcgi_pass转发到后端的 FastCGI 服务器进行处理。
四HTTPS 配置
为了实现网站的安全访问我们需要为 Nginx 配置 HTTPS。首先需要获取 SSL 证书假设证书文件为example.com.crt和example.com.key存放在/etc/nginx/ssl目录下。配置如下
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {# 正常的业务逻辑配置}}
上述配置中listen 443 ssl表示监听 443 端口并启用 SSL 加密ssl_certificate和ssl_certificate_key指定了证书文件的路径同时通过ssl_protocols和ssl_ciphers指令设置了支持的 SSL 协议版本和加密算法。
四、Nginx 配置优化技巧
一性能优化
调整工作进程数根据服务器的 CPU 核心数合理设置worker_processes充分利用 CPU 资源提高并发处理能力。
优化连接数通过合理设置worker_connections增加每个工作进程能够处理的最大连接数同时结合keepalive_timeout等参数优化连接的复用和管理减少连接建立和销毁的开销。
启用高效文件传输开启sendfile指令采用高效的文件传输模式减少磁盘 I/O 操作提高文件传输效率。
启用 gzip 压缩根据业务需求合理配置gzip指令对传输的数据进行压缩减少网络带宽消耗加快页面加载速度。
二安全优化
关闭版本信息显示在http块中添加server_tokens off;指令避免在响应头中暴露 Nginx 的版本信息降低被攻击的风险。
设置访问控制通过location块结合allow和deny指令限制特定 IP 或 IP 段的访问如只允许某些内部 IP 访问管理后台页面。
防止恶意请求利用limit_req和limit_conn指令设置请求频率限制和连接数限制防止恶意用户通过大量请求对服务器进行攻击。
五、Nginx 配置常见问题与解决
配置文件语法错误在修改 Nginx 配置文件后使用nginx -t命令检查语法是否正确。如果出现语法错误根据错误提示信息仔细检查配置文件中的指令拼写、符号使用等问题。
服务器无法启动可能是端口被占用、配置文件错误或权限不足等原因导致。使用netstat -tlnp命令检查端口占用情况确保 Nginx 监听的端口未被其他程序占用。同时检查配置文件的权限是否正确确保 Nginx 进程有足够的权限读取配置文件和访问相关资源。
代理转发异常如果代理转发出现问题检查proxy_pass指令的目标地址是否正确后端服务器是否正常运行。同时注意检查proxy_set_header设置的请求头信息是否符合后端服务器的要求。