目录
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$ '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能否正常运行
5.编辑配置文件PHP.oldboyedu.com-->用来测试Nginx+PHP能否正常运行
Nginx+ PHP 检查: [root@oldboy-pythonedu ~] cat /etc/Nginx/conf.d/PHP.oldboyedu.com.conf ; 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,1)">$password); // 检测连接 if (!$conn) { die(Connection Failed: . MysqLi_connect_error()); } echo 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_name blog.oldboyedu.com; root /code/wordpress; location /; include fastcgi_params; } }
3.检查语法,重启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 ; 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_param SCRIPT_FILENAME ; fastcgi_param HTTPS off; include fastcgi_params; } }
3.检查Nginx语法,重启服务
4.修改PHP.ini 配置文件,调整解析器支持的最大上传限制
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_name kod.oldboyedu.com; root /code/kodcloud; location /; include fastcgi_params; } }
4.检查Nginx语法--重启Nginx服务--域名解析
....这几个指令前面有介绍,这里不在bb
扩展一台应用节点
扩展应用节点,说白了,就是再建立一台虚拟机。。
1.克隆一台全新的虚拟机,并修改IP地址
sed -i 'sold#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 's201#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 'sSELINUX=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 ~] 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的数据库上恢复数据
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:目前有三台主机,他们的关系如下所示,后面还会再加上一台。