专栏集锦,大佬们可以收藏以备不时之需:

Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9

Python 专栏:http://t.csdnimg.cn/hMwPR

Redis 专栏:http://t.csdnimg.cn/Qq0Xc

TensorFlow 专栏:http://t.csdnimg.cn/SOien

Logback 专栏:http://t.csdnimg.cn/UejSC

量子计算:

量子计算 | 解密著名量子算法Shor算法和Grover算法

AI机器学习实战:

AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

Python实战:

Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

Spring Cloud实战:

Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

Spring Cloud 实战 | 解密Feign底层原理,包含实战源码

Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

1024程序员节特辑文章:

1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | OKR VS KPI谁更合适?

1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

Spring实战系列文章:

Spring实战 | Spring AOP核心秘笈之葵花宝典

Spring实战 | Spring IOC不能说的秘密?

国庆中秋特辑系列文章:

国庆中秋特辑(八)Spring Boot项目如何使用JPA

国庆中秋特辑(七)Java软件工程师常见20道编程面试题

国庆中秋特辑(六)大学生常见30道宝藏编程面试题

国庆中秋特辑(五)MySQL如何性能调优?下篇

国庆中秋特辑(四)MySQL如何性能调优?上篇

国庆中秋特辑(三)使用生成对抗网络(GAN)生成具有节日氛围的画作,深度学习框架 TensorFlow 和 Keras 来实现

国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

目录

1 Nginx 发展历史2 如何使用 Nginx3 详细配置 Nginx3.1 安装 Nginx3.2 配置文件结构3.3 配置虚拟主机3.4 配置代理3.5 配置 SSL/TLS3.5.1 准备 SSL/TLS 证书和私钥3.5.2 配置 Nginx 服务器块3.5.3 配置要点解释3.5.4 重启 Nginx 服务3.5.5 测试 SSL/TLS 配置

3.6 配置缓存3.7 配置负载均衡3.7.1 健康检查

3.8 配置访问控制3.9 配置日志3.9.1 访问日志3.9.2 错误日志3.9.3 日志滚动

3.10 测试和优化3.10.1 负载测试3.10.2 性能测试3.10.3 配置优化3.10.4 代码级优化3.10.5 日志分析3.10.6 使用性能监控工具

1 Nginx 发展历史

Nginx 的历史可以追溯到 1990 年代末期,当时互联网开始迅速发展,传统的 HTTP 服务器如 Apache 开始显得力不从心,无法满足日益增长的访问量和并发请求。为了解决这个问题,Igor Sysoev 开始编写 Nginx,首个版本在 2004 年发布。Nginx 的设计理念是追求极高的性能和稳定性,同时还具有较低的内存消耗和资源占用,这使得它能够处理大量并发请求,非常适合于需要处理高负载的服务器环境。

早期开发:Nginx最初是在Unix-like系统中运行的,使用C语言开发,并在一个BSD-like许可证下发布。它的设计受到了当时的网络环境以及Igor Sysoev作为系统管理员的工作经验的影响。版本迭代:随着时间的发展,Nginx逐渐增加了更多的功能,如SSL/TLS支持、虚拟主机、HTTP/2等,并且不断地对性能进行优化。社区和公司:2009年,Sysoev与别人合伙成立了Nginx公司,以支持Nginx的发展。2019年,Nginx公司被F5 Networks收购,成为其商业产品的一部分。创始人离职:2020年,Igor Sysoev宣布退出F5 Networks,以更多地关注家庭和个人项目。他在离职时得到了社区的高度评价和感谢,因为他的工作对Nginx的成功和互联网的发展有着深远的影响。

2 如何使用 Nginx

使用 Nginx 主要包括以下几个步骤:

下载和安装:首先,用户需要从 Nginx 的官方网站下载适合自己操作系统的 Nginx 版本。Nginx 提供了 Linux、Windows 等平台的版本。下载完成后,根据操作系统的不同,执行相应的安装程序。配置:Nginx 的配置相对简洁。它使用基于文件系统的配置,主要通过修改配置文件来设置代理、缓存、负载均衡等。配置文件通常位于安装目录下的 nginx.conf,此外还包括用于设置静态资源服务、虚拟主机等的额外配置文件。启动和停止:通过执行安装目录下的 nginx 命令来启动 Nginx 服务,而停止服务通常可以通过 nginx -s stop 或使用操作系统服务管理工具来实现。测试:启动服务后,可以通过访问 http://localhost 或服务器 IP 地址来测试 Nginx 是否正常运行。监控和维护:Nginx 提供了监控工具,比如 nginx -s status 来检查服务状态。此外,定期检查和更新软件,以及监控服务器性能和访问日志,对于维护 Nginx 服务是必要的。

3 详细配置 Nginx

配置 Nginx 是一个相对复杂的过程,下面将详细介绍如何配置 Nginx。

3.1 安装 Nginx

在 Linux 系统中,您可以使用包管理器来安装 Nginx。例如,在 Ubuntu 或 Debian 上,您可以使用以下命令:

sudo apt update

sudo apt install nginx

在 CentOS 或 RHEL 上,您可以使用以下命令:

sudo yum install epel-release

sudo yum install nginx

如果您需要从源代码编译 Nginx,可以执行以下命令:

wget http://nginx.org/download/nginx-1.21.3.tar.gz

tar zxvf nginx-1.21.3.tar.gz

cd nginx-1.21.3

./configure

make

sudo make install

3.2 配置文件结构

Nginx 的配置文件通常位于 /etc/nginx/ 或 /usr/local/nginx/conf/。主要配置文件是 nginx.conf,它包含了全局配置。此外,还有 sites-available、sites-enabled 和 conf.d 目录,这些目录包含了虚拟主机的配置文件。

3.3 配置虚拟主机

要配置一个虚拟主机,您需要在 sites-available 目录下创建一个配置文件,然后将其符号链接到 sites-enabled 目录。在配置文件中,您可以设置服务器监听的主机名、端口、文档根目录等。例如:

server {

listen 80;

server_name example.com www.example.com;

root /var/www/example;

index index.html index.htm;

}

3.4 配置代理

Nginx 可以配置为反向代理服务器,将请求转发到后端服务器。在配置文件中,您需要设置代理服务器的主机名和端口,以及如何处理请求。例如:

location / {

proxy_pass http://backend-server: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;

}

3.5 配置 SSL/TLS

配置 Nginx 以使用 SSL/TLS 是保护网站安全性和用户隐私的重要步骤。以下是一个基本的指南,用于在 Nginx 中配置 SSL/TLS。

3.5.1 准备 SSL/TLS 证书和私钥

在配置 Nginx 之前,您需要有一个有效的 SSL/TLS 证书和相应的私钥。您可以从证书颁发机构(CA)获得证书,或者使用 Let’s Encrypt 提供的免费证书。如果您选择 Let’s Encrypt,可以使用 certbot 工具自动获取和配置证书。

3.5.2 配置 Nginx 服务器块

在 Nginx 配置文件中,通常在 server 块内添加 SSL/TLS 配置。以下是一个示例配置:

server {

listen 443 ssl;

server_name example.com www.example.com;

ssl_certificate /path/to/your/fullchain.pem;

ssl_certificate_key /path/to/your/privatekey.pem;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 10m;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;

root /var/www/example;

index index.html index.htm;

}

3.5.3 配置要点解释

listen 443 ssl;:这指定服务器在端口 443 上监听 SSL/TLS 连接。ssl_certificate 和 ssl_certificate_key:这些指令指定 SSL/TLS 证书和私钥的路径。确保这些文件是正确的,并且服务器用户有权限读取它们。ssl_session_cache 和 ssl_session_timeout:这些指令配置 SSL 会话缓存和超时设置。ssl_ciphers:这个指令指定用于加密的 SSL 演算法。您应该选择强加密算法,并避免使用已弃用的算法。ssl_prefer_server_ciphers on;:这告诉客户端优先使用服务器提供的加密套件。

3.5.4 重启 Nginx 服务

在更新配置文件后,您需要重启 Nginx 服务以使更改生效:

sudo systemctl restart nginx

或者,如果您不是使用系统服务管理器,可以使用以下命令:

sudo nginx -s restart

3.5.5 测试 SSL/TLS 配置

在重启服务后,您应该测试 SSL/TLS 配置是否正确。您可以使用 curl 命令来测试:

curl -I https://example.com

您应该看到返回的响应中包含 HTTP/2 200 状态码,以及 SSL/TLS 相关的头部信息,表明 SSL/TLS 已正确配置。 请注意,SSL/TLS 配置可能会因您的具体需求和服务器配置而有所不同。确保遵循最佳实践,并定期更新您的证书和私钥。

3.6 配置缓存

Nginx 可以通过 proxy_cache 模块来缓存后端服务器的响应。这需要确保您的 Nginx 编译时包含了 ngx_http_proxy_module 和 ngx_http_cache_module。大多数标准 Nginx 安装都包含这些模块。 以下是一个基本的 Nginx 缓存配置示例:

http {

proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=cache_zone:10m;

upstream backend {

server backend1.example.com;

server backend2.example.com;

}

server {

listen 80;

location / {

proxy_pass http://backend;

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_cache cache_zone;

proxy_cache_valid any;

proxy_cache_min_uses 1;

proxy_cache_max_uses 10;

proxy_cache_disk_mode async;

proxy_cache_exclude "*/charset/*.html";

}

}

}

在这个例子中:

proxy_cache_path 指令用于设置缓存的存储路径和大小。levels=1:2 表示缓存的存储层次,keys_zone=cache_zone:10m 表示缓存的键值存储在内存中的大小为 10MB。upstream 定义了后端服务器组。proxy_pass 指令将请求转发到后端服务器。proxy_set_header 指令确保转发请求时携带必要的头部信息。proxy_cache 指令启用缓存,并指定缓存的键值存储在哪个 keys_zone 中。proxy_cache_valid 指令设置缓存的响应状态码,any 表示所有状态码的响应都可以缓存。proxy_cache_min_uses 和 proxy_cache_max_uses 指令设置缓存的最低和最高使用次数。proxy_cache_disk_mode 指令设置磁盘 I/O 模式,async 表示异步模式,可以提高性能。proxy_cache_exclude 指令用于排除某些文件或目录的缓存。 请注意,这只是一个基本的缓存配置示例。在实际应用中,您可能需要根据具体情况调整缓存路径、大小、过期时间等。此外,Nginx 还支持更高级的缓存配置,如缓存动态内容、使用不同的缓存策略等。

3.7 配置负载均衡

Nginx 的负载均衡功能是通过其内置的 upstream 模块实现的。以下是一个基本的 Nginx 负载均衡配置示例:

http {

upstream myapp1 {

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

# 可以设置权重,如 server srv1.example.com weight=3;

# 其他负载均衡方法还包括 least_conn, ip_hash 等。

}

server {

listen 80;

location / {

proxy_pass http://myapp1;

# 在这里可以设置更多的代理设置,如 proxy_set_header, proxy_connect_timeout 等。

}

}

}

在这个例子中,myapp1 是一个上游服务器组,它包含三个服务器:srv1.example.com、srv2.example.com 和 srv3.example.com。Nginx 将根据配置的负载均衡算法(默认是轮询)将请求分发到这些服务器上。

server 指令用于定义一个上游服务器,可以指定服务器的主机名或 IP 地址。weight 指令用于设置服务器的权重,权重越高的服务器将接收更多的请求。least_conn 指令用于启用最少连接数负载均衡算法,请求将被发送到当前连接数最少的服务器。ip_hash 指令用于启用基于源 IP 的哈希负载均衡算法,来自同一 IP 的请求总是被代理到同一台服务器,这有助于保持用户的会话。

3.7.1 健康检查

Nginx 还提供了健康检查功能,以确保上游服务器组的健康状态。以下是一个包含健康检查的配置示例:

http {

upstream myapp1 {

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

# 健康检查

health_check {

enable on;

interval 3000; # 每隔 3 秒检查一次

timeout 1000; # 超时时间

unhealthy_threshold 3; # 不健康连续检查次数

healthy_threshold 3; # 健康连续检查次数

http_get http://example.com/health; # 检查的 URL

}

}

server {

listen 80;

location / {

proxy_pass http://myapp1;

# 其他代理设置

}

}

}

在这个例子中,health_check 指令用于配置健康检查。如果服务器在连续三次检查中都未能通过健康检查,它将被标记为不健康,并将不再接收新的请求。当服务器恢复健康时,它将重新加入上游服务器组。 请注意,这些示例仅用于说明 Nginx 负载均衡的基本配置。在实际应用中,您可能需要根据具体情况调整服务器地址、负载均衡算法、健康检查配置等。此外,Nginx 还支持更高级的配置,如使用 upstream 模块中的 hash、url_hash、least_time 等指令,以及通过 map 模块进行更复杂的请求路由。

3.8 配置访问控制

在 Nginx 中,访问控制通常是通过 location 指令和 allow、deny 指令来实现的。这些指令可以定义哪些客户端(基于 IP 地址)被允许访问特定的位置(URL 或路径)。以下是一个简单的访问控制配置示例:

http {

server {

listen 80;

location / {

# 允许来自特定IP地址的访问

allow 192.168.1.0/24;

# 拒绝来自特定IP地址的访问

deny all;

}

location /private/ {

# 只允许来自特定IP地址的访问

allow 192.168.1.10;

# 拒绝其他所有IP地址的访问

deny all;

}

}

}

在这个例子中:

allow 指令用于指定允许访问的 IP 地址或地址范围。例如,192.168.1.0/24 表示允许来自 IP 地址 192.168.1.0 到 192.168.1.255 的访问。deny 指令用于指定拒绝访问的 IP 地址或地址范围。使用 all 表示拒绝所有不匹配 allow 指令的 IP 地址。location 指令用于匹配特定的 URL 或路径。当请求的 URL 匹配到某个 location 时,相应的 allow 和 deny 指令将被应用。 请注意,allow 和 deny 指令在同一个 location 中使用时,allow 指令的优先级高于 deny 指令。这意味着如果请求的 IP 地址同时匹配到 allow 和 deny,请求将被允许。 此外,Nginx 还支持使用 geo 模块进行基于地理位置的访问控制,以及使用 map 模块进行更复杂的访问控制策略。这些功能可能需要额外的配置和模块支持。

3.9 配置日志

Nginx 的日志配置通常包括访问日志和错误日志。访问日志记录了客户端的请求信息,而错误日志记录了 Nginx 的错误信息。以下是如何配置这两种日志的示例:

3.9.1 访问日志

访问日志的配置通常在 http 块中进行,使用 log_format 指令定义日志的格式,然后使用 access_log 指令指定日志文件的路径和名称。

http {

log_format combined_with_time '$remote_addr - $remote_user [$time_local] '

'"$request" $status $body_bytes_sent '

'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';

server {

listen 80;

location / {

# 其他配置...

}

access_log /var/log/nginx/access.log combined_with_time;

}

}

在这个例子中:

log_format 指令定义了一个名为 combined_with_time 的日志格式,它包括了客户端的 IP 地址、用户、请求时间、请求方法、状态码、传输的字节数、引用来源、用户代理和 X-Forwarded-For 头部。access_log 指令指定了日志文件的路径和名称,以及使用的日志格式。

3.9.2 错误日志

错误日志的配置通常在 http 块中进行,使用 error_log 指令指定日志文件的路径和名称。

http {

# 其他配置...

server {

listen 80;

location / {

# 其他配置...

}

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

}

}

在这个例子中:

error_log 指令指定了错误日志文件的路径和名称。

3.9.3 日志滚动

Nginx 也支持日志滚动,这意味着当日志文件达到一定大小时,它会自动切换到下一个文件。这可以通过 logrotate 指令配置。

http {

# 其他配置...

server {

listen 80;

location / {

# 其他配置...

}

access_log /var/log/nginx/access.log combined_with_time;

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

logrotate {

daily;

rotate 7;

postrotate

/usr/sbin/nginx -s reopen;

endscript;

}

}

}

在这个例子中:

logrotate 指令配置了日志的滚动策略,daily 表示每天滚动一次,rotate 7 表示保留最近的 7 个日志文件。postrotate 指令用于在日志滚动后执行命令,这里是通过 nginx -s reopen 命令重新打开日志文件。 请注意,这些示例仅用于说明 Nginx 日志配置的基本方法。在实际应用中,您可能需要根据具体情况调整日志格式、路径、滚动策略等。此外,Nginx 还支持更高级的日志配置,如使用 log_format 指令自定义日志格式,以及通过 map 模块进行更复杂的日志处理。

3.10 测试和优化

Nginx 的测试和优化可以通过多种方式进行,包括负载测试、性能测试、配置优化和代码级优化。以下是一些基本的步骤和方法:

3.10.1 负载测试

负载测试可以帮助你了解 Nginx 在高负载情况下的性能。可以使用工具如 Apache Bench(ab)或wrk来进行测试。 例如,使用 Apache Bench 进行测试的命令如下:

ab -n 1000 -c 100 http://your-nginx-server.com/

这个命令会向指定的 Nginx 服务器发送 1000 个请求,每次发送 100 个请求。

3.10.2 性能测试

性能测试可以帮助你了解 Nginx 的处理能力和响应时间。可以使用工具如 Siege 进行测试。 例如,使用 Siege 进行测试的命令如下:

siege -c 100 -r 1000 http://your-nginx-server.com/

这个命令会使用 100 个并发用户对服务器进行性能测试。

3.10.3 配置优化

优化 Nginx 的配置文件可以显著提高性能。以下是一些常见的优化建议:

减少 HTTP 头部的传输大小。开启 GZIP 压缩。使用 expires 指令设置缓存过期时间。使用 limit_req 模块限制请求速率。使用 limit_conn 模块限制并发连接数。 例如,以下配置可以减少 HTTP 头部的大小并开启 GZIP 压缩:

http {

server {

listen 80;

location / {

# 开启 GZIP 压缩

gzip on;

# 设置最小压缩文件大小

gzip_min_length 1k;

# 压缩缓冲区大小

gzip_buffers 16 8k;

# 设置压缩级别,1 压缩速度最快,9 压缩率最高,通常设置为4

gzip_comp_level 4;

# 对指定的 MIME 类型生效

gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;

}

}

}

3.10.4 代码级优化

如果需要更深入的优化,可以修改 Nginx 的源代码。这通常涉及到内核级别的优化,需要具备相应的编程技能和知识。 例如,可以修改 Nginx 的 ngx_http_core_module 模块来优化 HTTP 请求的处理。

3.10.5 日志分析

分析 Nginx 的日志文件可以帮助你了解服务器的性能和问题所在。可以使用工具如 awk、grep 或 logstash 进行日志分析。 例如,使用 grep 查找所有 500 内部服务器错误的日志:

grep '500 Internal Server Error' /var/log/nginx/error.log

3.10.6 使用性能监控工具

使用性能监控工具如 Prometheus 和 Grafana 可以帮助你实时监控 Nginx 的性能指标,并进行相应的优化。 通过这些测试和优化方法,你可以了解 Nginx 的性能瓶颈,并采取相应的措施来提高其性能。请注意,优化应该是一个持续的过程,需要根据实际情况和需求进行调整。

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。