目录

1.nginx模块:限制连接 limit_conn

2.nginx模块:状态监控 stub_status

3.nginx模块:Location

4.用nginx+php跑wordpress项目

5.用nginx+php跑edusoho项目

6.用nginx+php跑kodcloud项目

7.扩展一台应用节点

8.拆分数据库到独立的服务器

nginx模块:限制连接 limit_conn

限制连接limit_conn主要用在下载,也就是可以限制同时下载的数量

[root@oldboy-pythonedu mirror]# cat  /etc/nginx/conf.d/mirror.oldboyedu.com.conf
limit_conn_zone $binary_remote_addr zone=addr:10m; # 定义限制的key, 分配区域大小
server {
listen 80;
server_name mirror.oldboyedu.com;
charset utf8;
limit_conn addr 1; # 调用区域限制,限制key只可以出现1次, 相当于限制来源客户端IP的连接数为1
limit_conn_status 500; # 限制成功后,会返回500的错误状态码,默认返回503 limit_rate_after 200m; # 全速下载200m资源
limit_rate 300k; # 达到200m以后,限制300k的速度 error_page 500 = @testerror; # 如果 出现500错误,则让其跳转到内部的 @testerror location @testerror { # 定义 @testerror, 返回具体的动作
default_type text/html;
return 200 '$remote_addr 你超过了最大连接限制, 请充值VIP解封!';
}
location / {
root /code/mirror;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}

nginx模块:状态监控 stub_status

    location = /status {
stub_status;
}

一共有7种状态:

Active connections: 2

server accepts handled requests

74             74       104

Reading: 0 Writing: 1 Waiting: 1

关于7个参数的解释

Active connections:  活跃的连接数

accepts:  接受的总TCP连接数

handled:  总处理的TCP连接数

requests:  总的 http 请求数

关于Reading,Writing,Waiting的理解

假设现在有两条船分别为C,S

C船需要S船的一个物品,C船需要S船的1个物品,那么此时C船就要给S船发送一个消息

1.S船收到这个信息就是reading

2.S船将物资发送给C船,这个时候就是writing

3.如果C船需要S船很多个物品,那么需要C船和S船建立起一个物资传送管道,不断的传送物资。这个管道建立起来的时候,就是waiting状态了。

nginx模块:Location

作用: 控制用户请求 uri 的具体路径

用法: location [ = | ~ | ~* | ^~ ] uri { ... }

(多个location时会用上, 但多个location会出现优先级的问题)

1.Location优先级

匹配符 匹配规则 优先级
= 精准匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~*  不区分大小写的正则匹配 4
/ 通用匹配,任何请求都会匹配到 5

当输入下面的URL时,Location会怎么匹配呢?

http://location.oldboyedu.com/index.html   location /

http://location.oldboyedu.com/documents/1.html    location /documents/

http://location.oldboyedu.com/images/1.gif    location ^~ /images/

http://location.oldboyedu.com/documents/1.jpg   location ~* \.(gif|jpg|jpeg)

2.Location具体如何使用

server {
listen 80;
server_name location2.oldxu.com; # 通用匹配,任何请求都会匹配到
location / {
root html;
index index.html;
} # 精准匹配,必须请求的uri是/nginx_status
location = /nginx_status {
stub_status;
} # 严格区分大小写,匹配以.php结尾的都走这个location
location ~ \.php$ {
default_type text/html;
return 200 'php访问成功';
} # 严格区分大小写,匹配以.jsp结尾的都走这个location
location ~ \.jsp$ {
default_type text/html;
return 200 'jsp访问成功';
} # 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location
location ~* \.(jpg|gif|png|js|css)$ {
return 403;
} # 不区分大小写匹配
location ~* \.(sql|bak|tgz|tar.gz|.git)$ {
deny all;
}
}

用nginx+php跑wordpress项目

1.LNMP架构

L = Linux

N = Nginx

M ~= MySQL | Mariadb

P ~= PHP | Python

2.LNMP架构安装

1.安装PHP

# 安装php:
[root@oldboy-pythonedu ~]# rpm -e $(rpm -qa |grep php) #卸载php5版本
[root@oldboy-pythonedu ~]# wget http://cdn.xuliangwei.com/php.zip
[root@oldboy-pythonedu ~]# unzip php.zip
[root@oldboy-pythonedu ~]# yum localinstall php/*.rpm -y

2.修改PHP进程运行的身份

# 修改进程运行的身份
[root@oldboy-pythonedu ~]# sed -i 's#user = apache#user = nginx#g' /etc/php-fpm.d/www.conf
[root@oldboy-pythonedu ~]# sed -i 's#group = apache#group = nginx#g' /etc/php-fpm.d/www.conf

3.启动php-fpm

# 启动php-fpm
[root@oldboy-pythonedu ~]# systemctl enable php-fpm
[root@oldboy-pythonedu ~]# systemctl start php-fpm

4.编辑index.php-->用来测试nginx+php能否正常运行

[root@oldboy-pythonedu ~]# cat /code/index.php
<?php
phpinfo();
?>

5.编辑配置文件php.oldboyedu.com-->用来测试nginx+php能否正常运行

# nginx+ php 检查:
[root@oldboy-pythonedu ~]# cat /etc/nginx/conf.d/php.oldboyedu.com.conf
server {
listen 80;
server_name php.oldboyedu.com;
root /code; location / {
index index.php;
} location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

通过访问php.oldboyedu.com即可查看nginx+php是否成功

6.安装mysql

[root@oldboy-pythonedu ~]# yum install mariadb mariadb-server -y
[root@oldboy-pythonedu ~]# systemctl enable mariadb
[root@oldboy-pythonedu ~]# systemctl start mariadb
[root@oldboy-pythonedu ~]# mysqladmin password 'Oldxu.com123'
[root@oldboy-pythonedu ~]# mysql -uroot -pOldxu.com123
MariaDB [(none)]>
MariaDB [(none)]> create database wordpress charset utf8;

7.编辑mysql.php-->用来测试php+mysql是否成功

[root@oldboy-pythonedu ~]# cat /code/mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "Oldxu.com123"; // 创建连接
$conn = mysqli_connect($servername, $username, $password); // 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php连接MySQL数据库成功";
?>

编辑完代码后,输入如下指令:

[root@oldboy-pythonedu ~]# php /code/mysql.php 

如果出现php连接MySQL数据库成功,则代表成功

3.部署WordPress

1.下载代码,存储至指定位置,变更权限

[root@oldboy-pythonedu ~]# cd /code/
[root@oldboy-pythonedu code]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
[root@oldboy-pythonedu code]# tar xf latest-zh_CN.tar.gz
[root@oldboy-pythonedu code]# chown -R nginx.nginx wordpress/

2.编写Nginx配置文件:blog.oldboyedu.com.conf

[root@oldboy-pythonedu code]# cat /etc/nginx/conf.d/blog.oldboyedu.com.conf
server {
listen 80;
server_name blog.oldboyedu.com;
root /code/wordpress; location / {
index index.php;
} location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

3.检查语法,重启nginx服务

[root@oldboy-pythonedu code]# nginx -t
[root@oldboy-pythonedu code]# systemctl reload nginx

4.配置域名解析.访问浏览器.安装该产品

修改域名的路径:C:\Windows\System32\drivers\etc\hosts

改成如下格式即可:

用nginx+php跑edusoho项目

前面已经安装好php和mysql环境了,所以接下来直接跑项目就可以了

1.安装EduSoho

mkdir /code
cd /code
rz # 上传文件
tar xf edusoho-8.2.17.tar.gz #注意:我们的进程能够以什么方式去访问一个文件或目录,取决于进程所运行的用户身份对该文件有什么权限
chown -R nginx.nginx edusoho

2.编写nginx配置文件:edusoho.oldboyedu.com.conf

vim /etc/nginx/conf.d/edusoho.oldboyedu.conf
server {
listen 80;
server_name edu.oldboyedu.com;
root /code/edusoho/web;
client_max_body_size 1024m; #允许上传视频大小限制
client_body_buffer_size 100m; #缓冲区大小(太小会提示a client request body is buffered to a temporary) location / {
index app.php;
try_files $uri @rewriteapp;
} location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
} location ~ ^/udisk {
internal;
root /code/edusoho/app/data/;
} location ~ ^/(app|app_dev)\.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
fastcgi_param HTTP_X-Sendfile-Type X-Accel-Redirect;
fastcgi_param HTTP_X-Accel-Mapping /udisk=/code/edusoho/app/data/udisk;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
} location ~* \.(jpg|jpeg|gif|png|ico|swf)$ {
expires 3y;
access_log off;
gzip off;
} location ~* \.(css|js)$ {
access_log off;
expires 3y;
} location ~ ^/files/.*\.(php|php5)$ {
deny all;
} location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
include fastcgi_params;
}
}

3.检查nginx语法,重启服务

nginx -t
systemctl restart nginx

4.修改php.ini 配置文件,调整解析器支持的最大上传限制

vim /etc/php.ini
upload_max_filesize = 1024M
post_max_size = 1024M systemctl restart php-fpm

5.网站中的一些功能如何使用

用nginx+php跑kodcloud项目

1.nginx+php环境

...前面已经介绍了,这里不再多bb

2.下载kodcloud代码

[root@oldboy-pythonedu ~]# cd /code
[root@oldboy-pythonedu code]# wget http://static.kodcloud.com/update/download/kodbox.1.13.zip
[root@oldboy-pythonedu code]# mkdir kodcloud
[root@oldboy-pythonedu code]# unzip kodbox.1.13.zip -d kodcloud/
[root@oldboy-pythonedu code]# chown -R nginx.nginx /code/kodcloud/

3.修改nginx配置文件:kod.oldboyedu.com.conf

[root@oldboy-pythonedu code]# cat /etc/nginx/conf.d/kod.oldboyedu.com.conf
server {
listen 80;
server_name kod.oldboyedu.com;
root /code/kodcloud; location / {
index index.php;
} location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

4.检查nginx语法--重启nginx服务--域名解析

....这几个指令前面有介绍,这里不在bb

扩展一台应用节点

扩展应用节点,说白了,就是再建立一台虚拟机。。

1.克隆一台全新的虚拟机,并修改IP地址

sed -i 's#old#new#g' /etc/sysconfig/network-scripts/ifcfg-ens32 # 将10.0.0.200替换成10.0.0.201

    # old: 旧的IP尾号
# new: 新的IP尾号 [root@oldboy-pythonedu ~]# hostnamectl set-hostname node2 # 修改主机名称

2.安装各种需要的环境

# 1.安装Nginx PHP环境
[root@node2 ~]# yum install vim net-tools unzip wget lrzsz -y # 安装基础工具
[root@node2 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 配置epel源 # 2.安装Nginx
[root@node2 ~]# yum install nginx -y # 3.安装PHP
[root@node2 ~]# unzip php.zip
[root@node2 ~]# yum localinstall php/*.rpm -y # 4.拷贝Nginx配置 scp
[root@node2 ~]# scp root@10.0.0.200:/etc/nginx/nginx.conf /etc/nginx/nginx.conf
[root@node2 ~]# scp -r root@10.0.0.200:/etc/nginx/conf.d/*.conf /etc/nginx/conf.d/ # 5.拷贝php配置
[root@node2 ~]# scp root@10.0.0.200:/etc/php.ini /etc/php.ini
[root@node2 ~]# scp root@10.0.0.200:/etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf # 6.关闭防火墙
[root@node2 ~]# systemctl disable firewalld
[root@node2 ~]# systemctl stop firewalld
[root@node2 ~]# setenforce 0
[root@node2 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config # 7.拷贝所有代码
[root@node2 ~]# scp -rp root@10.0.0.200:/code /
[root@node2 ~]# chown -R nginx.nginx /code/ # 8.启动服务
[root@node2 ~]# systemctl enable nginx php-fpm
[root@node2 ~]# systemctl start nginx php-fpm

拆分数据库到独立的服务器

1.准备基础环境, 修改IP地址,修改主机名称,关闭防火墙

sed -i 's#201#202#g' /etc/sysconfig/network-scripts/ifcfg-ens32
systemctl restart network
hostnamectl set-hostname node-mysql
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config yum install vim net-tools unzip wget lrzsz -y
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.安装Mariadb

[root@oldboy-pythonedu ~]# yum install mariadb mariadb-server -y
[root@oldboy-pythonedu ~]# systemctl enable mariadb
[root@oldboy-pythonedu ~]# systemctl start mariadb
[root@oldboy-pythonedu ~]# mysql
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'Oldxu.com123';
MariaDB [(none)]>

3.将10.0.0.200数据库中的数据库备份下来,然后恢复至 10.0.0.202 主机的MySQL上

[root@oldboy-pythonedu ~]# mysqldump -uroot -pOldxu.com123 -B wordpress edusoho > bak.sql
[root@oldboy-pythonedu ~]# scp bak.sql root@10.0.0.202:~

4.在10.0.0.202的数据库上恢复数据

[root@oldboy-pythonedu ~]# mysql < bak.sql

5.在10.0.0.201上修改连接数据库的地址(所有应用节点都需要操作)

# Wordpress:
[root@node2 ~]# vim /code/wordpress/wp-config.php
define( 'DB_NAME', 'wordpress' ); /** MySQL数据库用户名 */
define( 'DB_USER', 'all' ); /** MySQL数据库密码 */
define( 'DB_PASSWORD', 'Oldxu.com123' ); /** MySQL主机 */
define( 'DB_HOST', '10.0.0.202' ); # edusohu:
[root@node2 ~]# vim /code/edusoho/app/config/parameters.yml
parameters:
database_driver: pdo_mysql
database_host: 10.0.0.202
database_port: 3306
database_name: edusoho
database_user: all
database_password: 'Oldxu.com123'

6.edusoho存在缓存,需要清除一下

[root@node2 ~]# rm -rf /code/edusoho/app/cache/*

Tip:目前有三台主机,他们的关系如下所示,后面还会再加上一台。

day64:nginx模块之限制连接&状态监控&Location/用nginx+php跑项目/扩展应用节点的更多相关文章

  1. Linux下查看Nginx的并发连接数和连接状态-乾颐堂

    Linux下查看Nginx等的并发连接数和连接状态. 1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$N ...

  2. day08 Nginx模块

    day08 Nginx模块 lnmp架构 l :Linux n :Nginx m :MySQL p :Python/PHP lnmp架构:是最简单的架构 Nginx中的模块(Python模块):前提是 ...

  3. 使用Nagios打造专业的业务状态监控

    想必各个公司都有部署zabbix之类的监控系统来监控服务器的资源使用情况.各服务的运行状态,是否这种监控就足够了呢?有没有遇到监控系统一切正常确发现项目无法正常对外提供服务的情况呢?本篇文章聊聊我们如 ...

  4. Nginx模块-ngx_http_mirror_module-流量复制【转】

    Nginx流量复制# 需求# 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: 可以验证功能是否正常,以及服务的性能: 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问 ...

  5. Nginx模块-ngx_http_mirror_module-流量复制

    参考1:https://www.cnblogs.com/cjsblog/p/12163207.html Nginx流量复制 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: ...

  6. zabbix监控nginx连接状态(转)

    zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...

  7. Nginx服务状态监控

    在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编译的时候加一下即可. 1. 模块安装 先使用命令查看是否已经安装这个模块: [ ...

  8. Nginx状态监控

    通过配置nginx.conf文件来实现对Nginx状态信息的监控. 1.配置nginx.conf vim /usr/local/nginx/conf/nginx.conf 再server块配置项中添加 ...

  9. Zabbix学习之路(七)之Nginx的状态监控

    1.安装nginx [root@linux-node2 ~]# yum install -y nginx [root@linux-node2 ~]# mkdir /etc/zabbix/zabbix_ ...

随机推荐

  1. Netty学习笔记-入门版

    目录 Netty学习笔记 前言 什么是Netty IO基础 概念说明 IO简单介绍 用户空间与内核空间 进程(Process) 线程(thread) 程序和进程 进程切换 进程阻塞 文件描述符 文件句 ...

  2. 谈谈Python中列表、元组和数组的区别和骚操作

    一.列表(List) 1.列表的特点 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔.如 L = [1,2,3], 列表a有3个成员. 列表是可变的数据类型[可进行增删改查],列表中可以包 ...

  3. 使用Java7提供的WatchService给目录添加新建文件监控

    程序: import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Path; import ...

  4. leetcode刷题-55跳跃游戏

    题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 思路 贪心算法:记录每一个位置能够跳跃到的最远距离,如果 ...

  5. ICARUS主题美化

    Icarus用户指南 - 主题美化 Icarus的主题样式编码文件为themes/icarus/layout/layout.jsx. 此文件定义了站点全局的样式设置.本文详细介绍了本主题针对文章分类的 ...

  6. 【小白学PyTorch】11 MobileNet详解及PyTorch实现

    文章来自微信公众号[机器学习炼丹术].我是炼丹兄,欢迎加我微信好友交流学习:cyx645016617. @ 目录 1 背景 2 深度可分离卷积 2.2 一般卷积计算量 2.2 深度可分离卷积计算量 2 ...

  7. 痞子衡嵌入式:IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link / CMSIS-DAP)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 做Cortex-M内核MCU嵌入式软件开发,可用的集成开发环境( ...

  8. defer implement for C/C++ using GCC/Clang extension

    前述: go 中defer 给出了一种,延时调用的方式来释放资源.但是对于C/C++去没有内置的这种属性.对于经常手动管理内存的C/C++有其是C程序员这种特性显得无比重要.这里给出了一种基于GCC/ ...

  9. Linux 【Shell脚本经典案例】

    Shell 简介 hell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口 当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理 ...

  10. 软件定义网络(SDN)第二次实验报告

    目录 实验 2 :Mininet 实验--拓扑的命令脚本生成 一.实验目的 二.实验任务 三.实验要求 四.具体实验步骤 引导实验 Part 1 引导实验 Part 2 本周实验任务完成流程 五.注意 ...