目錄
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:目前有三臺主機,他們的關係如下所示,後面還會再加上一臺。