【运维知识进阶篇】集群架构-Nginx基础(安装+启动+配置+多业务实现+日志管理)(下)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【运维知识进阶篇】集群架构-Nginx基础(安装+启动+配置+多业务实现+日志管理)(下)

Nginx配置文件

1、主配置文件

/etc/nginx/nginx.conf                             #Nginx主配置文件

1. [root@NFS ~]# cat /etc/nginx/nginx.conf 
2. #这里是核心区块
3. user  nginx;                                #虚拟用户,可以自定义
4. worker_processes  auto;                     #work子进程的数量,cpu核心数有几个,这个地方就是几个,之前版本数量都是1
5. 
6. error_log  /var/log/nginx/error.log notice; #错误日志存放的路径
7. pid        /var/run/nginx.pid;              #运行后的PID号的路径,用于停止启动时候杀死进程
8. 
9. #这里是事件模块
10. events {
11.     worker_connections  1024;                #每个进程最大的并发连接数,最高数量是65535,每个核心的并发数,等于总nginx的并发数,这个最大连接数量,还与文件描述符有关(打开文件最大数量)        
12. }
13. 
14. 
15. http {
16.     include       /etc/nginx/mime.types;     #支持的媒体类型
17.     default_type  application/octet-stream;  #如果找不到对应的类型,默认下载的方式打开
18. 
19.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
20. '$status $body_bytes_sent "$http_referer" '
21. '"$http_user_agent" "$http_x_forwarded_for"'; 
22. 
23.     access_log  /var/log/nginx/access.log  main; #默认main格式
24. 
25.     sendfile        on;       #文件的高效传输
26. #tcp_nopush     on;    
27. 
28.     keepalive_timeout  65;    #长链接超时时间,65秒没有新的请求
29. 
30. #gzip  on;                #是否开启压缩
31. 
32.     include /etc/nginx/conf.d/*.conf;    意思是*.conf里的配置内容在http模块下面
33. }
34. [root@NFS ~]# 
35. 
36. #虽然*.conf的路径是在/etc/nginx/conf.d目录下,但是实际路径是/etc/nginx,也就是说直接把配置写进去或者引用是一个道理。
37. 
38. 配置两种写法:
39. 1、cat /etc/nginx/conf.d/default.conf
40. 2、

/etc/nginx/conf.d/default.conf                #默认网站配置文件

1. server{
2. 
3.         listen 80;                        #监听的端口 IP地址
4. 
5.         server_name www.game.com;         #域名 localhost表示本机
6. 
7.         location / {                      #用户访问域名默认返回的内容,因为访问默认 
8. #www.game.com默认是有/,所以这里有根
9. 
10.         root /code;                      #指定用户去/code目录下找代码
11. 
12.         index index.html;                #默认给用户返回index.html 或者index.htm
13. 
14.         }
15. 
16. }
17. 
18. 可以一个配置文件写多个配置内容,也可以多个配置文件写多个配置内容
19. 测试完配置文件是否正确:nginx -t
20. 可以vim +7 nginx.conf,直接跳转到第七行
21. 测试完后重启nginx生效:systemctl restart nginx
22. 配置代码目录:没有目录报404,有目录没有文件报403
23. 使用curl,默认会返回配置的文件内容,但是浏览器访问,默认是访问www.game.com/index.html

2、代理配置文件

3、编码相关配置文件

4、管理相关配置文件

5、日志相关配置文件

Nginx多业务实现方式

1、使用不同端口号表示不同的业务

1. [root@NFS 4]# vim /etc/nginx/conf.d/default.conf 
2. server {
3.         listen 80;
4.         server_name www.game.com;#小霸王游戏
5.         location /{
6.                 root /code/1;
7.                 index index.html index.htm;
8.         }
9. }
10. server {
11.         listen 81;
12.         server_name www.game.com;#植物大战僵尸
13.         location /{
14.                 root /code/2;
15.                 index index.html index.htm;
16.         }
17. }
18. [root@NFS 4]# nginx -t
19. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
20. nginx: configuration file /etc/nginx/nginx.conf test is successful
21. [root@NFS 4]# systemctl restart nginx
22. [root@NFS 4]#

修改windows的本地hosts解析

windows浏览器分别访问www.game.com和www.game.com:81

2、使用不同的IP地址(多个网卡 不同的IP)

可以一个端口多个IP,解决端口不够用的问题

修改IP,写在listen前面,listen 10.0.0.88:80,

写在server_name那里,就算是域名匹配了,也能正常访问,但是不算IP地址匹配了。

3、可以使用不同的域名

1. [root@Web02 ~]# cat /etc/nginx/conf.d/server1.conf
2. server {
3.     listen       80;
4.     server_name  test1.koten.com;
5.     root /code/server1;
6. index index.html;
7.     ...
8. }
9. [root@Web01 ~]# cat /etc/nginx/conf.d/server2.conf
10. server {
11.     ...
12.     listen       80;
13.     server_name  test2.koten.com;
14.     root /code/server2;
15. index index.html;
16. }

Nginx日志管理

Nginx的日志记录模式非常灵活,每个级别的配置都有各自的独立的访问日志,日志格式通过log_format命令定义。

1、定义语法格式

1. # 配置语法: 包括: error.log access.log
2. Syntax: log_format name [escape=default|json] string ...;
3. Default: log_format combined "...";
4. Context: http

2、Nginx默认日志语法

1. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
2. '$status $body_bytes_sent "$http_referer" '
3. '"$http_user_agent" "$http_x_forwarded_for"';

3、Nginx日志格式允许包含的内置变量

1. $remote_addr        # 记录客户端IP地址
2. $remote_user        # 记录客户端用户名
3. $time_local         # 记录通用的本地时间
4. $time_iso8601       # 记录ISO8601标准格式下的本地时间
5. $request            # 记录请求的方法以及请求的http协议
6. $status             # 记录请求状态码(用于定位错误信息)
7. $body_bytes_sent    # 发送给客户端的资源字节数,不包括响应头的大小
8. $bytes_sent         # 发送给客户端的总字节数
9. $msec               # 日志写入时间。单位为秒,精度是毫秒。
10. $http_referer       # 记录从哪个页面链接访问过来的
11. $http_user_agent    # 记录客户端浏览器相关信息
12. $http_x_forwarded_for #记录客户端IP地址
13. $request_length     # 请求的长度(包括请求行, 请求头和请求正文)。
14. $request_time       # 请求花费的时间,单位为秒,精度毫秒
15. # 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
16. # $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
17. # 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。

4、access_log日志配置语法

1. Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
2. access_log off;
3. Default: access_log logs/access.log combined;
4. Context: http, server, location, if in location, limit_except

5、Nginx Access日志配置

1. server {
2.     listen 80;
3.     server_name code.koten.com;
4. 
5.     #将当前的server网站的访问日志记录至对应的目录,使用main格式
6. access_log /var/log/nginx/code.koten.com.log main;
7. location / {
8.         root /code;
9.     }
10. 
11.     #当有人请求改favicon.ico时,不记录日志
12. location /favicon.ico {
13. access_log off;
14. return 200;
15.     }
16. }

6、Nginx日志切割

使用logrotate切割日志

1. [root@nginx conf.d]# cat /etc/logrotate.d/nginx
2. /var/log/nginx/*.log {
3.         daily                   # 每天切割日志
4.         missingok               # 日志丢失忽略
5.         rotate 52               # 日志保留52天
6.         compress                # 日志文件压缩
7.         delaycompress           # 延迟压缩日志
8.         notifempty              # 不切割空文件
9.         create 640 nginx adm    # 日志文件权限
10.         sharedscripts
11.         postrotate      # 切割日志执行的命令
12. if [ -f /var/run/nginx.pid ]; then
13.                         kill -USR1 `cat /var/run/nginx.pid`
14.                 fi
15.         endscript
16. }

日志切割后的效果

1. [root@Web01 ~]# ll /var/log/nginx/
2. total 4044
3. -rw-r----- 1 www adm  54438 Oct 12 03:28 access.log-20181012.gz
4. -rw-r----- 1 www adm  28657 Oct 13 03:48 access.log-20181013.gz
5. -rw-r----- 1 www adm  10135 Oct 12 03:28 error.log-20181130.gz
6. -rw-r----- 1 www adm   7452 Oct 13 03:48 error.log-20181201.gz

goaccess日志监控

1. 第一步: 安装
2. 
3. [root@web01 ~]# yum -y install goaccess
4. 
5. 第二步: 配置
6. [root@web01 ~]# vim /etc/goaccess/goaccess.conf
7. time-format %H:%M:%S
8. date-format %d/%b/%Y
9. \# NCSA Combined Log Format
10. log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
11. 
12. 
13. 第三步: 通过命令行测试
14. [root@web01 ~]# goaccess -f /var/log/nginx/access.log
15. 
16. 第四步: 希望把页面存储下来使用浏览器进行访问
17. vim go.koten.com
18. server {
19.         listen 80;
20.         server_name go.koten.com;
21. 
22. location / {
23.         root /code/log;
24. index index.html;
25.         }
26. }
27. {root@web01 ~]# mkdir /code/log
28. [root@web01 ~]# nohup goaccess -f /var/log/nginx/access.log -o /code/log/index.html -p /etc/goaccess/goaccess.conf --real-time-html &

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
4月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
500 0
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
6月前
|
Ubuntu 网络协议 应用服务中间件
在 Ubuntu 上安装 Nginx
在 Ubuntu 上安装和配置 Nginx 非常简单。首先更新系统包,然后通过 `apt` 安装 Nginx,检查服务状态并配置防火墙规则。访问服务器 IP 测试是否成功显示默认页面。还可管理服务、创建虚拟主机及排查常见问题,适合新手快速上手部署高性能 Web 服务。
755 0
|
5月前
|
安全 应用服务中间件 Linux
Debian操作系统如何安装Nginx并开启HTTP2
本指南介绍了在Linux系统中通过源码编译安装Nginx的完整流程。首先更新软件包列表并安装必要的编译依赖,接着下载指定版本的Nginx源码包(如1.24.0),检查文件完整性后解压。随后通过配置脚本指定安装路径与模块(如HTTP SSL模块),执行编译和安装命令。最后创建软链接以便全局调用,并提供启动、停止及重载Nginx的命令,同时提醒注意安全组设置以确保正常访问。
|
7月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
7月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
8月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
685 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
7月前
|
Kubernetes 安全 应用服务中间件
IngressNightmare:Ingress Nginx 再曝5个安全漏洞,可接管你的 K8s 集群
是否还记得 2022 年 K8s Ingress Nginx 披露了的 3 个高危安全漏洞(CVE-2021-25745, CVE-2021-25746, CVE-2021-25748),并在那一年宣布停止接收新功能 PR,专注修复并提升稳定性。
|
10月前
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
914 25

热门文章

最新文章