avatar

Wz Blog

运维学习・持续更新

  • 首页
  • 文章
  • 登录/注册
  • 管理后台
主页 8.13 Nginx
文章

8.13 Nginx

发表于 2026-10-11 更新于 2026-10- 11
作者 Administrator
15~19 分钟 阅读

• Nginx常用到的命令:

▪ nginx -s stop:快速关闭nginx,可能不保存相关信息,迅速终止web服务

▪ nginx -s quit:平稳关闭nginx,保存相关信息,有安排的结束web服务

▪ nginx -s reload:改变了nginx相关配置,需要重新加载

▪ nginx -s reopen:重新打开日志文件

▪ nginx -s filename:为nginx指定一个配置文件,来代替缺省的

▪ nginx -t:不运行,仅仅测试配置文件

▪ nginx -v:显示nginx的版本

▪ nginx -V:显示nginx的版本,编译器版本和配置参数

▶ Nginx配置文件详解:

• nginx默认的配置文件时在安装目录下的/etc/nginx/conf.d目录下(主配置是/etc/nginx/nginx.conf)

![](/upload/Image-PoWs.png)

• 配置文件详解:

[root@nginx-a ~]# grep -Ev "#|^$" /etc/nginx/nginx.conf

user nginx; #使用谁的身份干活

▶ 思考:如果这个服务以root来启动,会出现什么问题?

root是系统最高权限账号。一旦Nginx系统出现漏洞,攻击者就会直接获得服务器最高管理员权限,整台服务器沦陷。以普通用户启动,即使被入侵了,入侵者的权限也很有限,降低了损伤程度。

▶ 思考:如果用户带/bin/bash会怎样,应不应该带?

nginx用户一般默认不带/bin/bash,如果带了的话,入侵者就可以远程登录,危害系统。

worker_processes auto; #一共有多少人干活

error_log /var/log/nginx/error.log; #干错了 记录在哪里

pid /run/nginx.pid; #nginx进程身份好,便于系统记录和管理它

include /usr/share/nginx/modules/*.conf; #增强这个工人的工具库,让它能力值上升

**以上为全局块配置**

events {

worker_connections 1024; **events事件块配置**

}

#log_format

#定义日志的格式,比如记录:

#谁访问的($remote_addr = IP地址)

#什么时候($time_local)

#访问了啥($request = 比如 GET /index.html)

#HTTP响应状态码($status)

#发送给客户端的响应体字节大小($body_bytes_sent)

#用户从哪个网页跳转过来访问当前接口($http_referer)

#用的什么浏览器($http_user_agent)

#用来获取经过反向代理、多层Nginx、负载均衡之后,最原始的客户端真实IP($http_x_forwarded_for)

http {

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; #连接完成后保持65秒(防止频繁重新握手)

types_hash_max_size 4096;

include /etc/nginx/mime.types; #告诉nginx不同文件后缀的格式

default_type application/octet-stream; #如果不认识的文件,默认当成二进制流(直接下载)浏览器收到改类型,不会尝试解析渲染,直接触发文件下载

include /etc/nginx/conf.d/*.conf; #要是有其他的需求,也加载进来,让工人处理

**HTTP块**

server {

listen 80; #监听端口

listen [::]:80; #监听端口十六进制表达

server_name _; #指定当前虚拟主机匹配的域名 _表示匹配全部

root /usr/share/nginx/html; #静态资源的磁盘根路径

include /etc/nginx/default.d/*.conf;

error_page 404 /404.html; #404页面配置

location = /404.html {

} **location块**

error_page 500 502 503 504 /50x.html; #50x页面配置

location = /50x.html {

}

**server块**

}

}

▶ 配置单一的图文并茂的静态网站:

1.在根目录下创建一个html目录,在里面再创建一个single-web目录


mkdir -p /html/single-web

2.在此目录下存放html文件

3.编写配置文件(需要把/etc/nginx/nginx.conf配置文件中server块注释掉)


vim /etc/nginx/conf.d/single-web.conf
server {
listen 80;
server_name _;
charset utf-8;
location / {
root /html/single-web;
index index.html index.htm;
}
}

4.测试配置文件有没有问题

nginx -t

5.修改html目录的所属主和所属组都为nginx


chown -R nginx:nginx /html

6.重新加载nginx配置文件,让配置生效


systemctl reload nginx.service

7.测试能否正常访问网站

▶ 访问不了排错:

• 防火墙是否关闭

• 服务是否成功启动

• 阿里云安全组是否配置

• 是否给html授权

• 修改配置文件之后是否重新加载

• 输入网址是否为配置文件中监听的端口(http:80 https:443)

• 之前配置错误访问到默认index(没有注释原配置文件中的server块),重新配置后,浏览器存在缓存,需要切换浏览器或者打开一个无痕浏览窗口

• 可以配置多ip、多端口、多域名(多个server块)

▶ nginx的alise使用:

• 将/static/映射到服务器上的/data/web/assets/目录(而非/data/web/assets/static/

▶例:输入www.xx.com/湖水/,湖水这张图片保存在image目录下

location /湖水/{

root /image; ------------->会去匹配/image/湖水/ 这个目录

} **找不到**

location /湖水/{

alias /image/; ------------->会去匹配/image/这个目录

} **找得到**

▶ nginx的Rewrite使用:

• 将旧路径/old-page永久重定向到新路径/new-page(permanent)

location /old-page {

rewrite ^/old-page$ /new-page permanent;

}

• 强制HTTPS跳转:

rewrite ^(.*)$ https://$host$1 permanent

**作用:所有通过HTTP访问的请求(如http://example.com)会被重定向到HTTPS(https://example.com)**

**•** 路径前缀替换:

将/blog/2023/some-post重写为/posts/2023/some-post

location /blog {

rewrite ^/blog/(.*)$ /posts/$1 break;

}

**break:终止后续的所有rewrite指令,直接处理重写后的路径。**

**last:表示终止当前location块的后续匹配**

**▶** HTTP反向代理

• 代理服务器proxy配置如下:

server {

listen 80;

charset utf-8;

server_name 11.0.1.251 #代理服务器的私网ip

location / {

**proxy_pass** http://11.0.1.252:80; #真实服务器的私网ip

}

}

tips:代理服务器要和真实服务器处在同一个VPC下,能够互相访问

▶ 负载均衡:

关键字:upstream:设定负载服务器的服务器列表

weight:参数表示权值,权值越高被分配到的几率越大

▶ 调配算法:

1.轮询(默认)

2.weight(轮询权值)

3.ip_hash:每个请求按访问IP的哈希结果分配

4.url_hash:按访问的URL的哈希结果来分配请求

5.fair:比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,相应时间短的优先分配。

配置:

upstream **fzjh** {

server 11.0.1.251:80 weight=1;

server 11.0.1.252:80 weight=1;

server 11.0.1.253:80 weight=1;

}

代理服务器的location块中要与upstream之后一样

proxy_pass http://**fzjh** ;

▶ 动静分离:

• 什么是动:网页的数据是动态加载------>动态加载:不是web服务器的一个静态文件(图片,文本文件等文件),加载的数据是在数据库中读取的

• 什么是静:网页的数据是静态资源

• 什么是动静分离:用代理服务器,使后台服务器分离处理动态资源和静态资源

tips:动态后端服务器对CPU要求较高

静态后端服务器对内存、硬盘、网络要求较高

• 配置动静分离总体流程:

1.配置静态服务器,正则匹配一个图片目录

▪ location ~* .*\\.(png|jpg|gif)${

root /html/static/images;

}

**补充:**

~*:表示执行一个正则匹配,不区分大小写

~:表示执行一个正则匹配,区分大小写

=:普通字符精准匹配

2.配置一个动态服务器jsp

▪ 安装tomcat,编写一个简单的jsp代码:

代码放在/usr/share/tomcat/webapps/ROOT目录下

3.单独检查动态和静态资源是否正常

4.配置代理服务器

▪ upstream static {

server 静态服务器私网ip

}

upstream java {

server 动态服务器私网ip

}

server {

listen 80;

charset utf -8;

server_name 代理服务器私网ip

location ~* .*\\.(png|jpg|gif)$ {

proxy_pass http://static;

include proxy_params; #引用请求头文件,静态可不写

}

location ~* .*\\.jsp$ {

proxy_pass http://java;

include proxy_params; #引用请求头文件,动态必须写

}

}

5.配置请求头

创建一个请求头代理信息,在/etc/nginx目录下创建proxy_params这个文件,内容如下:

▪ proxy_set_header Host $http_host;

#Host设置的是代理主机ip

▪ proxy_set_header X-Real-IP $remote_addr;

#X-Real-IP指客户端的真实IP

▪ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#X-Forwarded-For提供了记录整个请求链路上所有IP地址的能力

▪ proxy_set_header X-Forwarded-Proto $scheme;

#X-Forwarded-Proto用来确定客户端和服务器或代理连接之间所采取的协议(https http)

6.启动代理服务器,访问代理服务器,测试验证效果

Web与网络
笔记 Linux Nginx
许可协议:  CC BY 4.0
分享

相关文章

10月 11, 2026

Nginx问答题

▶ nginx工作原理: • Nginx核心架构:Master-Worker模型 ▪ Nginx启动后生成两类进程: 1.Master(主进程,管理员),不处理用户HTTP请求,管理所有Worker子进程 2.Worker(子进程,干活的),真正接受浏览器请求,处理请求,默认进程数=CPU核心数,W

10月 11, 2026

Nginx的优化思路和匹配优先级

**▶ Nginx优化方案:** **• 基础优化:** ▪ 使用最新稳定版本 ▪ 选择合适的编译参数 减少不必要的模块可以提升Nginx启动速度和运行效率 **• 性能优化:** ▪ 调整worker进程: 默认worker_processes数量通常设置为CPU核心数: worker_proce

10月 11, 2026

8.13 Nginx

• Nginx常用到的命令: ▪ nginx -s stop:快速关闭nginx,可能不保存相关信息,迅速终止web服务 ▪ nginx -s quit:平稳关闭nginx,保存相关信息,有安排的结束web服务 ▪ nginx -s reload:改变了nginx相关配置,需要重新加载 ▪ ngin

下一篇

8.19 MySQL

上一篇

8.11 Shell编程

最近更新

  • Kubernetes v1.28.2 双Master堆叠etcd + Haproxy/Keepalived 高可用部署 SOP(Docker + cri-dockerd)
  • 名词解释
  • ECS 实例反复冻结 —— 故障根因分析报告
  • 运维六大工作内容
  • 磁盘相关命令

热门标签

监控 Linux 数据库 Docker 笔记 CI/CD Kubernetes Nginx

目录

©2026 Wz Blog. 保留部分权利。

使用 Halo 主题 Chirpy