文章目录
1. 网站服务
1. 基础知识
1. 常见的网站服务软件
- 静态资源服务
- Apache
- Nginx:http://nginx.org/
- 动态资源服务
- PHP: https://www.php.net/ 终端浏览器进行访问
- Tomcat:利用移动端查看网页
- Python:开发难度较低
2. Nginx 服务特点
- 支持高并发,消耗内存资源少
- 具有多种功能
- 网站web服务功能 — apache
- 网站负载均衡功能 — LVS
- 网站缓存服务 — Squid
- 在多种系统平台都可以进行部署
nginx
实现网络通讯时使用的时异步网络IO模型:epoll
模型(apache -- select模型
)
2. nginx 软件安装部署过程
1. yum
方式进行安装
- 配置官方
yum
源
http://nginx.org/en/linux_packages.html#RHEL-CentOS
yum install -y nginx
2. 源码安装
- 请移步到 LNMP 搭建
https://blog.csdn.net/weixin_54898062/article/details/114276163
3. 查看官方版 nginx
的目录结构
-
nginx
日志文件定时切割处理vim /etc/logrotate.conf --------------------------------------------------- weekly # 定义默认日志切割的周期 rotate 4 # 定义只保留几个切割文件 create # 创建出一个相同的源文件 dateext # 定义角标(扩展名称信息) include /etc/logrotate.d # 加载包含 /etc/logrotate.d 目录中的的配置文件 /var/log/wtmp { # 单独对某个文件进行切割 monthly create 0664 root utmp minsize 1M # 最小大小为 1M,小于不切割 rotate 1 } ---------------------------------------------------
-
主配置文件
vim /etc/nginx/nginx.conf --------------------------------------------------- ## 第一个部分: 配置文件主区域配置 user www; # 定义worker进程管理的用户 worker_processes 2; # 定义有几个worker进程 == CPU核数 / 核数的2倍 error_log /var/log/nginx/error.log warn; # 定义错误日志路径信息 pid /var/run/nginx.pid; # 定义pid文件路径信息 ## 第二个部分: 配置文件事件区域 events { worker_connections 1024; # 一个worker进程可以同时接收1024访问请求 } ## 第三个部分: 配置http区域 http { include /etc/nginx/mime.types; # 加载一个配置文件 default_type application/octet-stream; # 指定默认识别文件类型 log_format gx '$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 gx; # 指定日志路径 sendfile on; # ??? tcp_nopush on; # ??? keepalive_timeout 65; # 超时时间 #gzip on; include /etc/nginx/conf.d/*.conf; # 加载一个配置文件 } --------------------------------------------------- ## 补充: nginx的进程 # master process: 主进程 --- 管理服务是否能够正常运行 老板 # worker process: 工作进程 --- 处理用户的访问请求 员工
-
扩展配置文件【虚拟主机配置文件】
vim /etc/nginx/nginx.d/default --------------------------------------------------- ## 第四个部分: server区域信息(配置一个网站 www/bbs/blog -- 一个虚拟主机) server { listen 8080; # 指定监听的端口 server_name www.oldboy.com; # 指定网站域名 root /usr/share/nginx/html; # 定义站点目录的位置 index index.html index.htm; # 定义首页文件 error_page 500 502 503 504 /50x.html; # 优雅显示页面信息 location = /50x.html { root /usr/share/nginx/html; } } ---------------------------------------------------
-
日志文件
cd /var/log/nginx
-
命令文件
/usr/sbin/nginx
-
站点目录
cd /usr/share/nginx/html
4. nginx
服务的企业应用
-
详情在LNMP搭建,这里仅做总结
https://blog.csdn.net/weixin_54898062/article/details/114276163 -
总结一:限制特定 IP 被访问
只需要将 listen 80; 改为 listen 172.16.1.133:80; 即可
-
总结二:
location
和花括号之间代表着什么形如 location /gx { root /usr/share/nginx/html; } 这样的,当在浏览器输入 www.gx.com:80/ 时,浏览器就要找到包含 / 的 location,若找不到就返回 404。 当在浏览器输入 www.gx.com:80/gx 时,浏览器就要找到包含 /gx 的 location,然后再根据 root 后的目录路径进行拼接,如上则是 /usr/share/nginx/html/gx/ ,默认找 index.html 文件,若找不到则返回 404。
-
总结三:
index
的含义index index.html index.htm; # 这段的含义是若不指定具体网页,则加载目录下 index.html 或 index.htm 文件
-
总结四: 用户认证注意事项
1. 密码文件设置时 `htpasswd` -cb /etc/nginx/.htpasswd gx 123456 加 -b 参数可以免交互 2. 修改密码文件的权限(600)时,要将属主改为 work 进程的用户
-
总结五:网站文件共享服务器
location / { autoindex on; } # 将 index.html 文件删除 # 如果要下载 .txt 文件,需要更改 mime.types 文件【/etc/nginx/mime.types】,文件中有的扩展名信息资源,进行访问时会直接看到数据信息,没有的直接下载。
-
总结六:网站中文乱码
charset utf-8;
-
总结七:别名功能的作用
01. 编写网站访问测试 02. 定位要方位的网站服务器
-
总结八:状态模块进行监控
vim /etc/nginx/conf.d/state.conf --------------------------------------------------- server { listen 80; server_name state.code.com; stub_status; } --------------------------------------------------- Active connections: # 激活的连接数信息 accepts # 接收的连接数总和 handled # 处理的连接数总和 requests # 总计的请求数量 Reading: # Nginx 服务读取请求报文的数量 Writing: # Nginx 服务响应报文信息数量 Waiting: # Nginx 队列机制,等待处理的报文数量
-
总结九:Nginx 日志功能的补充
01. 日志格式的补充 $http_referer # 记录调用网站资源的连接地址信息 $body_bytes_sent # 显示响应的数据尺寸信息 $http_x_forwarded_for # 真实的客户端IP地址
2. 负载均衡反向代理
1. 基础知识
1. 什么是集群
- 完成相同任务或工作的一组服务器
2. 什么是负载均衡
- 实现用户访问请求进行调度分配
- 实现用户访问压力分担
3. 什么是反向代理
- 用户外网无法直接访问公司内网的 web 服务器,然后就由代理服务器的外网网卡与用户连接,内网网卡与web服务器连接。当用户访问时,用户会认为代理服务器就是web服务器,此时用户为客户端,代理服务器为服务端。代理服务器将用户请求的指令分发给web服务器,此时代理服务器为客户端,web服务器为服务端。
- 正向代理:内网向外网进行访问,也不能进行直接访问,也需要代理服务器,内网通过代理服务器访问外网的过程就是,正向代理。
2. 负载均衡部署
1. 环境准备
-
将
web01
上的图片资料等数据同步到存储服务器## 1. 在 web 服务器上上传一张图片,然后查看图片的存放路径 http://blog.codefun.com/wp-content /uploads/2021/05/2.jpg # uploads 路径即为要备份的路径 ## 2. 配置存储服务器上的配置文件 vim /etc/exports ------------------------------------------------------------ /web 172.16.1.0/24(rw,sync,anonuid=996,anongid=994) ------------------------------------------------------------- ## 3. 建立共享目录 ## 4. 同步文件的属组和属主 ## 5. 在 web 服务器进行挂载
-
进行数据库的迁移
## 1. 新建数据库服务器 ## 2. 备份 web 服务器中数据库的全部内容 mysqldump -uroot -pmysql --all-database > /tmp/web.sql ## 3. 将备份的数据传到数据库服务器,并在数据库服务器上导入备份的数据 ## 4. 进入数据库服务的数据库软件,授权并优化数据库用户 `delete` from mysql.user where user="" and host="localhost"; `delete` from mysql.user where user="" and host="web01"; `grant` all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123'; `flush` privileges; ## 5. 修改 web 服务器上绑定的数据库服务的文件(这里以 wordpress 为例) vim /web/wordpress/wb-config.php ------------------------------------------------------------------- // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** // /** WordPress数据库的名称 */ define( 'DB_NAME', 'wordpress' ); /** MySQL数据库用户名 */ define( 'DB_USER', 'wordpress' ); /** MySQL数据库密码 */ define( 'DB_PASSWORD', 'wordpress' ); /** MySQL主机 */ define( 'DB_HOST', '172.16.1.136' ); /** 创建数据表时默认的文字编码 */ define( 'DB_CHARSET', 'utf8mb4' ); /** 数据库整理类型。如不确定请勿更改 */ define( 'DB_COLLATE', '' ); ------------------------------------------------------------------- ## 6. 关闭 web 服务器上的数据库软件,并测试是数据库迁移是否成功
-
克隆 web 服务器并重复上述操作
2. 部署负载均衡服务器
-
克隆模板主机并安装 nginx
-
配置扩展站点配置文件
pwd /etc/nginx/conf.d cat lb.conf -------------------------------------------------------------------------- upstream codefun { server 192.168.80.132:80; server 192.168.80.134:80; server 192.168.80.135:80; } server { listen 80; server_name blog.codefun.com; location / { proxy_pass http://codefun/; proxy_set_header HOST $host; } } ---------------------------------------------------------------------------
-
检查是否成功
3. 负载均衡的高级应用
-
实现不同的调度功能
## 1. 权重分配 upstream codefun { server 192.168.80.132:80 weight=3; server 192.168.80.134:80 weight=2; server 192.168.80.135:80 weight=1; } ## 2. 轮询分配 --- 平均分配 # 默认设置 ## 3. 设置热备份功能 upstream codefun { server 192.168.80.132:80 ; server 192.168.80.134:80 ; server 192.168.80.135:80 backup; } ## 4. 定义最大失败次数 upstream codefun { server 192.168.80.132:80 max_fails=5; #默认 1 } ## 5. 定义失败后重发的间隔 upstream codefun { server 192.168.80.132:80 fail_time=10s; #默认 1 }
-
实现不同的调度算法
upstream codefun { rr; ## 1. 轮询调度算法 wrr; ## 2. 权重调度算法 ip_hash; ## 3. 哈希算法,跟据用户的IP地址范围进行计算(出现反复登录的时候启用) least_conn; ## 4.根据服务器连接数分配资源 server 192.168.80.132:80; }
-
访问不同的网站地址,不能显示不同的网站页面
server { listen 80; server_name blog.codefun.com; location / { proxy_pass http://codefun/; ## proxy_set_header HOST $host; } }
-
访问网站用户地址信息无法进行分析统计
proxy_set_header X-Forwarded-For $remote_addr;
-
访问负载均衡会出现错误页面,影响用户体验(部分web服务器上网页缺失问题)
proxy_next_upstream error timeout http_404 http_502;
4. 实现网站的动态分离
-
优点
- 提高网站的服务安全性
- 管理操作工作简化
- 可以划分不同人员管理不同的集群服务
-
架构环境规划
集群名字 作用 管理的IP 目录结构 default 网站首页 172.16.1.132 /web/webcolony static 静态网页 172.16.1.134 /web/webcolony/static/ upload 上传网页 172.16.1.135 /web/webcolony/upload/ -
部署负载均衡
cat webcolony.conf -------------------------------------------------- upstream default { server 172.16.1.132:80; } upstream static { server 192.168.80.134:80; } upstream upload { server 172.16.1.135:80; } server { listen 80; server_name www.webcolony.com; location / { proxy_pass http://default; proxy_set_header HOST $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout http_404 http_502; } location /static { proxy_pass http://static; proxy_set_header HOST $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout http_404; } location /upload { proxy_pass http://upload; proxy_set_header HOST $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout http_404; } } --------------------------------------------------
-
部署 web 服务器
## web03 服务器 mkdir -p /web/webcolony/upload echo "upload" > /web/webcolony/upload/index.html ## web02 服务器 mkdir -p /web/webcolony/static echo "static" > /web/webcolony/static/index.html ## web01 服务器 mkdir -p /web/webcolony/ echo "default" > /web/webcolony/index.html ## 编写 webcolony.conf 文件[内容都相同] cat /etc/nginx/conf.d/webcolony.conf -------------------------------------------------- server { listen 80; server_name www.webcolony.com; root /web/webcolony/; index index.html; } --------------------------------------------------
5. 根据用户访问的终端信息显示不同的页面
-
操作步骤和上面差不多,这里仅说明怎么配置
vim /etc/nginx/conf.d/diffbrowser.conf -------------------------------------------------- upstream web { server 10.0.0.8:80; } upstream mobile { server 10.0.0.7:80; } upstream default { server 10.0.0.9:80; } server { listen 80; server_name www.oldboy.com; location / { ## if ($http_user_agent ~* iphone) { proxy_pass http://mobile; proxy_set_header Host $host; } if ($http_user_agent ~* Chrome) { proxy_pass http://web; proxy_set_header Host $host; } proxy_pass http://default; proxy_set_header Host $host; } } --------------------------------------------------