Nginx

Nginx

一、概述

1.1.nginx功能

  • Web 服务器:Nginx 可以直接处理客户端的 HTTP 请求,提供静态资源服务,如 HTML、CSS、JavaScript、图片等。它可以快速响应客户端的请求,减少用户等待时间。

  • 反向代理服务器:Nginx 可以作为反向代理服务器,接收客户端的请求,然后将请求转发到内部的服务器,并将服务器的响应返回给客户端。通过反向代理,用户可以隐藏内部服务器的真实 IP 地址,提高网站的安全性。

  • 负载均衡器:Nginx 可以通过多种算法将客户端的请求均匀地分配到多个后端服务器上,如轮询、IP 哈希、最少连接等。这样可以提高系统的可用性和性能,避免单个服务器因为负载过高而出现故障。

  • HTTP缓存:Nginx 可以对 HTTP 响应进行缓存,减少对后端服务器的请求,提高网站的响应速度。

  • 邮件代理服务器:Nginx 还可以作为电子邮件(IMAP/POP3)代理服务器,提供邮件转发和代理服务。它可以和邮件服务器集成,实现邮件的安全传输和管理。

1.2.nginx工作原理

nginx工作模式:单工作进程和多工作进程(默认)两种工作模式。

默认采用多进程工作模式,nginx启动后会运行一个master进程和多个worker进程。主进程负责读取和解析配置文件,管理工作进程,像启动、停止工作进程以及监控它们的状态等。工作进程则负责实际处理客户端的请求。

当客户端发起请求时,Nginx 会先接收连接,解析请求内容,明确请求的方法、URI 和 HTTP 版本等信息。在配置文件里查找匹配的 location 块,直接返回静态文件,或者将请求转发给后端服务器。处理完后,把响应返回给客户端。每个worker之间是平等的,共同竞争来处理来自客户端的请求。

1.3.master进程主要作用

  • **读取和解析配置文件:**Master 进程会在启动时读取 Nginx 的配置文件nginx.conf并对其进行解析。它会检查配置文件的语法是否正确,确保各项指令都符合 Nginx 的规范。

  • 应用配置更改:当你修改了 Nginx 的配置文件后,Master 进程可以在不中断服务的情况下应用新的配置。通过执行nginx -s reload命令,Master 进程会重新读取配置文件,并将新的配置信息传递给工作进程。

  • **监控工作进程:**Master 进程会持续监控工作进程的运行状态。如果某个工作进程因为异常情况(如内存泄漏、程序崩溃等)而终止,会重新启动新的worker进程。

  • **信号处理:**在接收到某些信号后,Master 进程会将信号传递给工作进程,让它们协同完成相应的操作。例如,在重新加载配置文件时,Master 进程会通知工作进程逐渐停止处理旧的请求,并开始按照新的配置处理新的请求。

二、安装

注意事项:nginx奇数版本是开发用的,偶数版本是稳定版

官网:https://nginx.org/

下载地址:https://nginx.org/download/

主机IP软件版本系统架构系统资源
192.168.200.16nginx-1.24.0.tar.gzRocky-Linux-8.1X862G/2Core

2.1.源码安装

#下载命令
wget https://nginx.org/download/nginx-1.24.0.tar.gz#创建nginx用户(不创建家目录、不允许登录)
useradd -M -s /sbin/nologin nginx#解压
tar -xf nginx-1.24.0.tar.gz -C /usr/local/#安装素偶需要的依赖
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel#检查编译环境(确定Nginx的安装目录、运行用户和用户组,以及启用所需的模块。在执行完该命令后,会生成相应的Makefile文件)
cd /usr/local/nginx-1.24.0/./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module#编译并安装
make && make install#创建软连接(作用:可以不使用绝对路径执行命令)
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/#启动用浏览器输入IP地址访问
nginx#curl访问
curl -I  192.168.200.16HTTP/1.1 200 OK
Server: nginx/1.24.0

2.2.常用命令

#启动命令
nginx 
#查看nginx的版本号
nginx -v
#查看nginx安装的模块
nginx -大V
#检查nginx的配置文件是否正确
nginx -t
#暴力停止nginx(不管当前是否有请求正在处理,会立即停止)
nginx -s stop
#优雅停止
nginx -s quit
#重载配置文件
nginx -s reload
#重新打开 Nginx 的日志文件,常用于日志轮转或更新日志文件的路径时
sudo nginx -s reopen

三、配置文件

Nginx的配置文件可以分为几个主要部分:

  1. 全局配置(Global Configuration)
  2. 事件配置(Events Block)
  3. http配置(HTTP Block)
  4. server配置(Server Block)
  5. location配置(Location Block)

3.1. 全局配置(Global Configuration)

全局配置块位于文件的最上方,通常设置 Nginx 的进程、用户、日志等全局参数。

user nginx;
worker_processes auto;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
  • nginx:指定 Nginx 执行命令,通常不需要修改。
  • worker_processes auto;:设置工作进程的数量,auto 表示自动根据 CPU 核心数来决定。通常设置为与 CPU 核心数一致,可以提高性能。
  • #error_log logs/error.log;:错误日志文件的路径。此行注释掉表示未启用日志文件。
  • #error_log logs/error.log notice;:定义日志级别为 notice,表示记录较少的重要信息。
  • #error_log logs/error.log info;:定义日志级别为 info,表示记录更多的调试和信息。
  • #pid logs/nginx.pid;:指定存放 Nginx 主进程 PID(进程 ID)的文件路径。此行注释掉表示未设置该路径。

3.2. 事件配置(Events Block)

该块用于配置与事件处理相关的设置,主要影响 Nginx 如何处理并发连接。

events {worker_connections  1024;  # 每个工作进程的最大连接数use epoll;               # 使用 epoll 模型(Linux 系统)
}
  • worker_connections 1024;:每个工作进程最大允许的连接数。1024 是默认值,表示每个进程最多处理 1024 个连接。
  • use epoll;:指定事件模型,epoll 是 Linux 上用于处理大量并发连接的高效事件驱动模型。

3.3. HTTP 配置(HTTP Block)

http 块包含了大多数关于 Web 服务的配置,诸如文件缓存、代理、SSL 等设置。

http {include       mime.types;  # 加载文件类型映射default_type  application/octet-stream;  # 默认 MIME 类型sendfile      on;          # 启用 sendfile(高效传输文件)keepalive_timeout  65;     # 设置保持连接的超时时间gzip on;                   # 启用 Gzip 压缩#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;#tcp_nopush     on;
}
  • include mime.types;:引入 mime.types 文件,进行文件类型的映射,如 .html 文件对应 text/html 类型。

  • default_type application/octet-stream;:默认的 MIME 类型,用于那些未在 mime.types 中定义的文件类型。

  • sendfile on;:启用零拷贝文件传输,使用操作系统的 sendfile 系统调用,提升文件传输性能。

  • keepalive_timeout 65;:设置客户端与服务器之间的空闲连接保持时间,单位为秒。65 秒表示保持连接 65 秒。

  • gzip on;:启用 HTTP 响应的 Gzip 压缩,减少传输的数据量,提升页面加载速度。

  • #log_format main …

    :定义访问日志的格式。每个字段表示访问日志中的不同信息:

    • $remote_addr:客户端的 IP 地址。
    • $remote_user:客户端的用户名(如果有的话)。
    • $time_local:请求发生的时间。
    • $request:客户端请求的详细信息(如请求方法、URL 等)。
    • $status:服务器的响应状态码。
    • $body_bytes_sent:发送给客户端的字节数。
    • $http_referer:请求来源的 URL。
    • $http_user_agent:客户端浏览器的信息。
    • $http_x_forwarded_for:客户端 IP(通过代理时传递的信息)。
  • #access_log logs/access.log main;:设置访问日志文件的位置和格式。main 是上面定义的日志格式。此行被注释掉,表示未启用访问日志记录。

  • #tcp_nopush on;:启用 TCP_NOPUSH 标志,用于合并多个小的 TCP 包,以提升性能。注释掉表示未启用该选项。

3.4. Server 配置块(用于 HTTP)

server {listen       80;  # 监听 80 端口(HTTP 协议默认端口)server_name  localhost;  # 绑定域名为 localhost
  • listen 80;:指定该虚拟主机监听的端口是 80,这是 HTTP 协议的默认端口。
  • server_name localhost;:指定该虚拟主机的域名为 localhost,即当请求的域名是 localhost 时,匹配该 server 块。
location / {root   html;  # 网站根目录为 htmlindex  index.html index.htm;  # 默认首页为 index.html 或 index.htm}
  • location /:处理根路径的请求。
    • root html;:根目录设置为 html 文件夹,通常是 Nginx 配置文件所在目录下的 html 文件夹。
    • index index.html index.htm;:指定默认的首页文件。如果访问根路径 /,Nginx 会查找并返回 index.htmlindex.htm 文件。
error_page   500 502 503 504  /50x.html;  # 自定义 500、502、503、504 错误页面location = /50x.html {root   html;  # 错误页面文件位于 html 目录下}
  • error_page 500 502 503 504 /50x.html;:当发生 500、502、503 或 504 错误时,返回自定义的错误页面 /50x.html
  • location = /50x.html { root html; }:当访问 /50x.html 页面时,从 html/50x.html 文件加载错误页面。

3.5. 注释掉的部分

 #proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}
  • #proxy_pass http://127.0.0.1;:这段配置本来是用于将 .php 文件的请求代理到本地的 Apache 服务器。由于注释掉了,表示当前配置没有启用该代理。
#pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;  # 将 PHP 请求转发到 PHP-FPM#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}
  • #fastcgi_pass 127.0.0.1:9000;:这部分配置本来是将 .php 请求转发给 PHP-FPM(FastCGI)服务,通常监听在 9000 端口。由于被注释掉,表示当前没有启用 PHP 处理。
#deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;  # 禁止访问 .htaccess 文件#}
  • #deny all;:这部分配置用于禁止访问 .htaccess 文件。.htaccess 文件通常由 Apache 使用,但在 Nginx 中不支持,因此要确保不让外部访问这些敏感文件。

3.6. 注释掉的虚拟主机配置(使用不同端口和 IP)

#another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;  # 监听 8000 端口#    listen       somename:8080;  # 监听指定域名和端口#    server_name  somename  alias  another.alias;##    location / {#        root   html;#        index  index.html index.htm;#    }#}
  • #server { … }:这部分配置展示了如何使用不同的 IP 地址、端口和域名来配置多个虚拟主机。这里被注释掉了,表示未启用这个虚拟主机。

3.7. 注释掉的 HTTPS 配置

 #HTTPS server##server {#    listen       443 ssl;  # 启用 SSL 并监听 443 端口#    server_name  localhost;##    ssl_certificate      cert.pem;  # SSL 证书#    ssl_certificate_key  cert.key;  # SSL 证书私钥##    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;##    ssl_ciphers  HIGH:!aNULL:!MD5;  # SSL 加密套件#    ssl_prefer_server_ciphers  on;##    location / {#        root   html;#        index  index.html index.htm;#    }#}
  • #listen 443 ssl;:启用 SSL 并监听 443 端口,这表示 Nginx 将提供 HTTPS 服务。此行被注释掉了,表示没有启用 HTTPS。

  • #ssl_certificate cert.pem;:指定 SSL 证书文件的路径,cert.pem 是证书文件的名称。

  • #ssl_certificate_key cert.key;:指定 SSL 证书的私钥文件路径。

  • #ssl_session_cache shared:SSL:1m;:设置 SSL 会话缓存,以提高性能。

  • #ssl_ciphers HIGH:!aNULL:!MD5;:指定使用的 SSL 加密套件。

  • #ssl_prefer_server_ciphers on;:启用服务器优先使用加密套件。

  • proxy_pass:将请求转发到另一台服务器。

  • rewrite:URL重写,可以用于301重定向、去除多余的斜杠等。

  • add_header:添加HTTP头部信息。

四、虚拟主机

美团有众多业务,每个业务可能有不同的域名,如外卖、酒店、旅游等业务分别有各自的域名。通过 Nginx 虚拟主机,可以在同一台服务器上配置多个server块,每个server块对应一个域名,监听相同或不同的端口,根据域名来分发请求,将用户的请求准确地路由到对应的业务应用服务器上。

示例:模拟使用2个不通域名域名相同端口对美团外卖和娱乐两个模块提供服务

waimai.meituan.com

yule.meituan.com

4.1.修改配置文件(添加多个虚拟主机)

vim /usr/local/nginx/conf/nginx.conf# 定义用户和工作进程数量
user nginx;
worker_processes auto;# 错误日志配置
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;# 事件模块配置
events {worker_connections 2048;use epoll;  # 适用于 Linux 系统,提高性能
}# HTTP 模块配置
http {# 包含 MIME 类型配置文件include mime.types;default_type application/octet-stream;# 日志格式定义log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 访问日志配置access_log /var/log/nginx/access.log main;# 开启高效文件传输模式sendfile on;tcp_nopush on;tcp_nodelay on;# 保持连接超时时间keepalive_timeout 65;# Gzip 压缩配置gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# 虚拟主机配置:waimai.meituan.comserver {listen 80;server_name waimai.meituan.com;# 字符编码设置charset utf-8;# 访问日志和错误日志配置access_log /var/log/nginx/waimai.meituan.com.access.log main;error_log /var/log/nginx/waimai.meituan.com.error.log;# 根目录和索引文件配置root /var/www/waimai.meituan.com;index index.html index.htm;# 错误页面配置error_page 404 /404.html;location = /404.html {internal;}error_page 500 502 503 504 /50x.html;location = /50x.html {internal;}}# 虚拟主机配置:yule.meituan.comserver {listen 80;server_name yule.meituan.com;# 字符编码设置charset utf-8;# 访问日志和错误日志配置access_log /var/log/nginx/yule.meituan.com.access.log main;error_log /var/log/nginx/yule.meituan.com.error.log;# 根目录和索引文件配置root /var/www/yule.meituan.com;index index.html index.htm;# 错误页面配置(相对路径)error_page 404 /404.html;location = /404.html {internal;}error_page 500 502 503 504 /50x.html;location = /50x.html {internal;}}
} 

4.2.创建所需文件

#创建网站根目录
mkdir -p /var/www/waimai.meituan.com
mkdir -p /var/www/yule.meituan.com#创建网页
echo "<h1>Welcome to waimai.meituan.com</h1>" > /var/www/waimai.meituan.com/index.htmlecho "<h1>Welcome to yule.meituan.com</h1>" > /var/www/yule.meituan.com/index.html
#创建日志存放目录
mkdir -p /var/log/nginx
#创建错误页面文件
echo "404 Not Found" > /var/www/waimai.meituan.com/404.html
echo "50x Server Error" > /var/www/waimai.meituan.com/50x.htmlecho "404 Not Found" > /var/www/yule.meituan.com/404.html
echo "50x Server Error" > /var/www/yule.meituan.com/50x.html
#权限设置
chown -R nginx:nginx /var/www
chown -R nginx:nginx /var/log/nginx
#设置系统最大打开文件的数量(默认1024)
ulimit -n 4096

4.3.添加域名

[root@localhost conf]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.16         waimai.meituan.com    #添加域名
192.168.200.16         yule.meituan.com      #添加域名

4.4.启动访问

nginx -t
nginx -s reload
[root@localhost conf]# curl waimai.meituan.com
<h1>Welcome to waimai.meituan.com</h1>[root@localhost conf]# curl yule.meituan.com
<h1>Welcome to yule.meituan.com</h1>

五、负载均衡

主机IP软件版本系统架构系统资源
192.168.200.16nginx-1.24.0.tar.gzRocky-Linux-8.1X862G/2Core
192.168.200.17tomcatRocky-Linux-8.1X862G/2Core
192.168.200.18tomcatRocky-Linux-8.1X862G/2Core

5.1.安装Tomcat(主机17和18)

yum -y install tomcat

5.2.创建所需目录

mkdir -p /usr/share/tomcat/webapps/waimai
mkdir -p /usr/share/tomcat/webapps/yuleecho "<html><body><h1>Welcome to waimai!</h1></body></html>" > /usr/share/tomcat/webapps/waimai/index.jsp
echo "<html><body><h1>Welcome to Yule!</h1></body></html>" > /usr/share/tomcat/webapps/yule/index.jsp

5.3.修改配置文件

cd /usr/share/tomcat/conf
cp -a server.xml{,.bak}vim server.xml#添加两个hosts
<Host name="waimai.meituan.com" appBase="/usr/share/tomcat/webapps" unpackWARs="true" autoDeploy="true"><Context path="/" docBase="waimai" reloadable="true"/><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="waimai_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host><Host name="yule.meituan.com" appBase="/usr/share/tomcat/webapps" unpackWARs="true" autoDeploy="true"><Context path="/" docBase="yule" reloadable="true"/><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="yule_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
  • name=“waimai.meituan.com”
    • 指定虚拟主机的主机名,即访问时的域名。
    • 浏览器访问时,使用这个域名进行请求匹配。
  • appBase=“/usr/share/tomcat/webapps”
    • 指定 Web 应用程序的根目录,存放项目文件的路径。
    • 例如:/usr/share/tomcat/webapps/waimai
  • unpackWARs=“true”
    • 当部署一个 .war 文件时,是否自动解压缩为目录结构。
    • 如果为 false,则不会解压,直接使用压缩包。
  • autoDeploy=“true”
    • 当检测到部署目录中有新 .war 文件时,是否自动重新部署。
    • 优点: 便于热更新和自动部署。
    • 缺点: 生产环境可能导致短暂服务中断。

5.4.启动Tomcat访问

[root@localhost conf]# systemctl start tomcat
[root@localhost conf]# curl 192.168.200.17:8080/waimai/
<html><body><h1>Welcome to Waimai!</h1></body></html>[root@localhost conf]# curl 192.168.200.17:8080/yule/
<html><body><h1>Welcome to Yule!</h1></body></html>

5.5.配置nginx

vim nginx.confuser nginx;
worker_processes auto;
worker_cpu_affinity auto;error_log /var/log/nginx/error.log warn;
error_log /var/log/nginx/error_critical.log crit;
pid /var/run/nginx.pid;events {worker_connections 1024;multi_accept on;use epoll;
}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';log_format cache_log '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''"$http_x_forwarded_for" [cache_status:$upstream_cache_status]';access_log /var/log/nginx/access.log main;access_log /var/log/nginx/cache_access.log cache_log;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;keepalive_requests 1000;gzip on;gzip_comp_level 6;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_proxied any;gzip_vary on;proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;proxy_temp_path /var/tmp/nginx;# 外卖业务后端负载均衡组upstream waimai_backend {least_conn;server 192.168.200.17:8080 max_fails=3 fail_timeout=10s;server 192.168.200.18:8080 max_fails=3 fail_timeout=10s;}# 娱乐业务后端负载均衡组upstream yule_backend {least_conn;server 192.168.200.17:8080 max_fails=3 fail_timeout=10s;server 192.168.200.18:8080 max_fails=3 fail_timeout=10s;}# waimai.meituan.com 虚拟主机配置server {listen 80;server_name waimai.meituan.com;charset utf-8;access_log /var/log/nginx/waimai.meituan.com.access.log main;error_log /var/log/nginx/waimai.meituan.com.error.log;location / {proxy_pass http://waimai_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 my_cache;proxy_cache_valid 200 302 60m;proxy_cache_valid 404 10m;add_header Nginx-Cache $upstream_cache_status;proxy_connect_timeout 10s;proxy_send_timeout 10s;proxy_read_timeout 10s;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}error_page 404 /404.html;location = /404.html {internal;}error_page 500 502 503 504 /50x.html;location = /50x.html {internal;}}# yule.meituan.com 虚拟主机配置server {listen 80;server_name yule.meituan.com;charset utf-8;access_log /var/log/nginx/yule.meituan.com.access.log main;error_log /var/log/nginx/yule.meituan.com.error.log;location / {proxy_pass http://yule_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 my_cache;proxy_cache_valid 200 302 60m;proxy_cache_valid 404 10m;add_header Nginx-Cache $upstream_cache_status;proxy_connect_timeout 10s;proxy_send_timeout 10s;proxy_read_timeout 10s;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}error_page 404 /404.html;location = /404.html {internal;}error_page 500 502 503 504 /50x.html;location = /50x.html {internal;}}
} 

user nginx;:指定 Nginx 工作进程运行的用户为 nginx,通过非 root 用户运行,降低安全风险。
worker_processes auto;:设置工作进程数量为 auto,Nginx 自动根据 CPU 核心数确定进程数,优化资源利用。
worker_cpu_affinity auto;:自动进行 CPU 亲和性设置,绑定工作进程到特定 CPU 核心,减少进程切换开销。
error_log /var/log/nginx/error.log warn;:定义错误日志路径为 /var/log/nginx/error.log,记录警告级别(warn)及以上错误信息。
error_log /var/log/nginx/error_critical.log crit;:单独记录严重级别(crit)错误到 /var/log/nginx/error_critical.log。
pid /var/run/nginx.pid;:指定 Nginx 主进程 PID 文件路径,用于进程管理(如启停、查看状态)。
events { … }:事件处理配置块,调整连接处理参数:
worker_connections 1024;:每个工作进程可同时处理的最大连接数。
multi_accept on;:允许工作进程一次性接收多个新连接,提升高并发处理效率。
use epoll;:使用 Linux 的 epoll 事件模型,高效处理并发连接。
http { … }:HTTP 服务核心配置块,包含全局及虚拟主机配置:
include mime.types;:引入 mime.types 文件,定义文件扩展名对应的 MIME 类型。
default_type application/octet-stream;:设置默认 MIME 类型为二进制流,处理未知类型文件。
log_format main …;:定义 main 日志格式,记录客户端 IP、请求时间、状态码等常规信息。
log_format cache_log …;:定义 cache_log 日志格式,额外记录缓存状态(如 HIT/MISS)。
access_log /var/log/nginx/access.log main;:按 main 格式记录常规访问日志。
access_log /var/log/nginx/cache_access.log cache_log;:按 cache_log 格式记录缓存相关日志。
sendfile on;:开启高效文件传输,减少内核与用户空间数据拷贝。
tcp_nopush on;:配合 sendfile,优化网络包发送,提升吞吐量。
tcp_nodelay on;:禁用 Nagle 算法,降低实时应用(如长连接)的传输延迟。
keepalive_timeout 65;:长连接超时时间为 65 秒,无活动则关闭连接。
keepalive_requests 1000;:单个长连接最多处理 1000 个请求,防止资源滥用。
gzip on;:开启 Gzip 压缩,减小响应数据体积。
gzip_comp_level 6;:设置压缩级别为 6,平衡压缩率与 CPU 消耗。
gzip_types text/plain …;:指定对文本、CSS、JSON 等 MIME 类型内容压缩。
gzip_proxied any;:对所有代理请求的响应也进行压缩。
gzip_vary on;:在响应头添加 Vary: Accept-Encoding,优化缓存策略。
proxy_cache_path /var/cache/nginx …;:配置代理缓存路径、大小、过期时间等,缓存代理响应。
proxy_temp_path /var/tmp/nginx;:设置代理临时文件存储路径,避免污染主缓存目录。
upstream waimai_backend { … }:定义后端服务器组(外卖业务),实现负载均衡:
least_conn;:采用最少连接数算法,分配请求到当前连接数最少的服务器。
server 192.168.200.17:8080 max_fails=3 fail_timeout=10s;:定义后端服务器地址,设置失败重试策略(10 秒内最多 3 次失败)。
server { … }:虚拟主机配置(以 waimai.meituan.com 为例):
listen 80;:监听 80 端口,接收 HTTP 请求。
server_name waimai.meituan.com;:绑定域名,识别对应虚拟主机请求。
charset utf-8;:设置响应字符编码为 UTF-8,支持多语言。
access_log /var/log/nginx/waimai.meituan.com.access.log main;:记录该虚拟主机的常规访问日志。
error_log /var/log/nginx/waimai.meituan.com.error.log;:记录该虚拟主机的错误日志。
location / { … }:匹配根路径请求的处理逻辑:
proxy_pass http://waimai_backend;:将请求代理到 waimai_backend 后端服务器组。
proxy_set_header Host $host;:传递客户端请求的 Host 头到后端。
proxy_set_header X-Real-IP $remote_addr;:传递客户端真实 IP 到后端。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:记录客户端及代理服务器 IP 链到后端。
proxy_cache my_cache;:启用 my_cache 缓存区,缓存代理响应。
proxy_cache_valid 200 302 60m;:对 200、302 状态码响应缓存 60 分钟。
proxy_cache_valid 404 10m;:对 404 状态码响应缓存 10 分钟。
add_header Nginx-Cache $upstream_cache_status;:在响应头添加缓存状态信息。
proxy_connect_timeout 10s;:与后端建立连接的超时时间。
proxy_send_timeout 10s;:向后端发送请求数据的超时时间。
proxy_read_timeout 10s;:从后端读取响应数据的超时时间。
proxy_next_upstream error …;:定义切换后端服务器的条件(如错误、超时、5xx 状态码)。
error_page 404 /404.html;:定义 404 错误返回自定义页面。
location = /404.html { internal; }:限制 /404.html 仅内部访问,禁止外部直接请求。

5.6.添加域名解析并访问

[root@localhost conf]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.16         waimai.meituan.com
192.168.200.16         yule.meituan.com[root@localhost conf]# curl http://waimai.meituan.com
<html><body><h1>Welcome to Waimai!</h1></body></html>
[root@localhost conf]# curl http://yule.meituan.com
<html><body><h1>Welcome to Yule!</h1></body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37850.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UDS诊断、ECU刷写、自动化测试、车联网测试、DTC故障注入测试、坏境测试、可靠性测试、压力测试、性能测试等

每日直播时间&#xff1a;&#xff08;直播方式&#xff1a;腾讯会议&#xff09; 周一到周五&#xff1a;20&#xff1a;00-23&#xff1a;00 周六与周日&#xff1a;9&#xff1a;00-17&#xff1a;00 向进腾讯会议学习的&#xff0c;可以关注我并后台留言 直播内容&#xff…

AI大模型介绍

大模型介绍 大模型是指具有大规模参数和复杂计算结构的机器学习模型&#xff0c;通常由深度神经网络构建而成&#xff0c;拥有数十亿甚至数千亿个参数 开发大模型不是从0开始&#xff0c;是建立在已有的大模型基座模型上做开发&#xff0c;构建企业知识库&#xff08;向量数据库…

C++ 异常 【无敌详细版】

1. C语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 1. 终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除0错误时就会终止程序。 2. 返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的错误。…

redis的典型应用 --缓存

Redis最主要的用途&#xff0c;分为三个方面&#xff1a; 1.存储数据&#xff08;内存数据库&#xff09; 2.缓存&#xff08;最常用&#xff09; 3.消息队列 缓存 (cache) 是计算机中的⼀个经典的概念。核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅&…

初始操作系统---Linux

目录 前言: 硬件层是软件层设计的基石(冯诺依曼体系结构): 冯诺依曼体系结构: 整个系统的运行效率 存储分级的概念 感性的理解数据的流动: 初始操作系统: 本质: 操作系统存在的必要性: 进程(系统里的任务): 操作系统创建进程的方式: 一些内容补充: 系统调用: 小结: 前…

<项目> 主从Reactor模型的高并发服务器

目录 Reactor 概念 分类 单Reactor单线程 单Reactor多线程 多Reactor多线程 项目介绍 项目规划 模块关系 实现 TimerWheel -- 时间轮定时器 定时器系统调用 时间轮设计 通用类型Any Buffer Socket Channel Poller EventLoop&#xff08;核心&#xff09; eventfd 设计思路 …

游戏引擎学习第173天

今天的总结和计划 今天我们将继续昨天和前几天的工作&#xff0c;基本上已经完成了字体支持的功能&#xff0c;我们成功地把字体功能加入了游戏中&#xff0c;包括字距调整等基本功能。然而&#xff0c;我觉得整体还没有完全完成&#xff0c;感觉还有一些地方没有完全打理好&a…

Linux安装go环境

安装一个lazydocker&#xff0c;根据文档需要先安装go环境 https://github.com/jesseduffield/lazydocker 官方文档解析 https://go.dev/doc/install 文档内容如下&#xff0c;一共三步 1.删除先前安装的go&#xff0c;解压下载的go压缩包到/usr/local目录 2.添加环境变量&…

React如何导入md5,把密码password进行md5加密

在 React 项目里对密码进行 MD5 加密&#xff0c;你可以借助 crypto-js 库&#xff0c;它提供了 MD5 加密功能。以下是详细步骤&#xff1a; 1. 安装 crypto-js 库 在项目根目录下&#xff0c;通过以下命令来安装 crypto-js &#xff1a; npm install crypto-js 2. 在 Reac…

【ES】Elasticsearch学习

文章目录 简单的安装 简单的安装 参考&#xff1a;https://blog.csdn.net/smilehappiness/article/details/118466378 官网&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html 下载&#xff1a;https://www.elastic.co/cn/downloads/e…

Cool Request:可以统计任意方法耗时

什么是Cool Request Cool Request是一个IDEA中的接口调试插件&#xff0c;除了可以发起基本的HTTP请求之外&#xff0c;还提供了强大的反射调用能力&#xff0c;可以绕过拦截器&#xff0c;这点广受网友的好评&#xff0c;当然伴随着还有Spring中对Scheduled注解的调用&#x…

dfs(二十二)78. 子集

78. 子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 &#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[1],[2],[1,2]…

什么是TCP,UDP,MQTT?

以下内容来源于抖音,作者织点代码,读者根据文章内容以及相应论文添加自己的理解进行注释。 计算机之间怎么通信? 彼此之间用网线连接在一起就可以了 但是这样子太麻烦了,成本太高,操作也麻烦 集线器 于是我们可以把线拧在一起 而拧在一起的这个设备,就是集线器 但集线…

计算机操作系统(三) 操作系统的特性、运行环境与核心功能(附带图谱更好对比理解))

计算机操作系统&#xff08;三&#xff09; 操作系统的特性、运行环境与核心功能 前言一、操作系统的基本特性1.1 并发1.2 共享1.3 虚拟1.4 异步 二、操作系统的运行环境2.1 硬件支持2.2 操作系统内核2.3 处理机的双重工作模式2.4 中断与异常 三、操作系统的主要功能3.1 处理机…

k8s搭建kube-prometheus

后续再补一个k8s集群搭建的博客&#xff0c;从0开始搭建k8s集群。使用kube-prometheus非常方便&#xff0c;主要问题只在于拉取镜像。除了拉取镜像外其他时间5分钟即可。耐心等待拉取镜像。 一.kube-prometheus简介 kube-prometheus 是一个专为 Kubernetes 设计的开源监控解决…

QT网页显示的几种方法及对比

一.直接跳转打开网页 1.使用QDesktopServices::openUrl调用系统浏览器 原理&#xff1a;直接调用操作系统默认浏览器打开指定URL&#xff0c;不在应用程序内嵌入网页。 优点&#xff1a; 实现简单&#xff0c;无需额外模块或依赖。 适用于仅需跳转外部浏览器的场景。 缺点&…

【Java SE】抽象类/方法、模板设计模式

目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式&#xff08;抽象类使用场景&#xff09; 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法&#xff0c;需要声明&#xff0c;但是又不确定如何实现时&#xff…

Python数据可视化工具:六西格玛及其基础工具概览

在当今数据驱动的时代&#xff0c;数据分析和可视化工具成为了各行业优化流程、提升质量的关键手段。六西格玛&#xff08;Six Sigma&#xff09;作为一种以数据为基础、追求完美质量的管理理念&#xff0c;其实施依赖于一系列基础工具的灵活运用。而Python&#xff0c;凭借其强…

调试 Rust + WebAssembly 版康威生命游戏

1. 启用 Panic 日志 1.1 让 Panic 信息显示在浏览器控制台 如果 Rust 代码发生 panic!()&#xff0c;默认情况下不会在浏览器开发者工具中显示详细的错误信息。这使得排查问题变得困难。 我们可以使用 console_error_panic_hook 这个 Rust crate&#xff0c;将 Panic 信息打…

网络编程中客户端与服务器的搭建与协议包应用

1.客户端的搭建 2.服务器搭建 3.TCP中的粘包现象 tcp协议为了提高发送的效率&#xff0c;会将短时间连续发送的小数据&#xff0c;当做一组数据统一发送 原理是&#xff1a; tcp协议本身存在一个1500字节的缓存区&#xff0c;tcp协议每次write发送数据的时候&#xff0c;总是…