一、LNMP動態(tài)網站架構
一、動態(tài)網站架構:
index.php? 開源的php? ? ? ??????Windows/Linux+nginx+php+mysql
index.py? ? 開源的python????????Windows/Linux+apache+python+mysql
index.jsp? ? 商業(yè)JAVA? ? ? ? ? ? ?windows/Linux+tomcat+JDK+Oracle
index.asp? ?商業(yè)C#????????????????Windows+iis+asp.net+sql-server/oracle/mogodb
二、LNMP動態(tài)網站環(huán)境部署
準備環(huán)境:
# systemctl stop firewalld
# setenforce 0
# yum clean all
# yum makecache
1.Linux部署? :?
#? ? systemctl stop firewalld
#? ? setenforce 0
2.Nginx部署
#? ? yum? ? -y? ? install? ? ?nginx
3.php-fpm部署
部署有兩種方法源碼部署和RPM部署,這里選擇一個RPM部署方法:
?#??yum install -y php-fpm php-mysql php-gd
?#??php-fpm:php接收動態(tài)請求的程序????
?#??php-mysql:php鏈接mysql的程序
?#??php-gd:圖形庫程序(GD庫可以處理圖片,或者生成圖片)
下載完成,啟動php-fpm
? ? #? ? systemctl restart php-fpm? ? ? ? ? ? ? ? 開機自啟:? ? #? ? systemctl enable php-fpm
啟動后,查看服務端口
netstat -anpt | grep 9000
然后,測試php頁面:
#???vim /usr/share/nginx/html/index.php
測試語句:
?#??<?php
?#? ?phpinfo();
?#???>
在nginx配置文件里面添加php主頁名稱:? ? #? ? vim /etc/nginx/conf.d/defalut.conf
# ?server {
#???location / {
?#??...
?#??index index.php index.html;
?#??...
?#??}
#? ? }
然后,重啟nginx服務
# systemctl restart nginx
測試頁面:測試結果:

4.mysql部署
安裝mysql服務器程序和客戶機程序
# yum -y install mariadb-server mariadb
開機自啟動mysql服務器
systemctl start mysql
systemctl enable mysql
修改mysql的密碼為‘wangmouren’
# mysqladmin password ‘wangmouren’
進入到數據庫里面
#mysql -uroot -p ‘wangmouren’
創(chuàng)建數據庫,存放頁面
# create database wangmouren;
授權wangning用戶管理bbs庫
# grant all on wangmouren.* to wangning@'192.168.182.142' indentified by '123456';
刷新權限
# flush privileges;
配置php頁面
# vim /usr/share/nginx/html/index.php
# <?php
#? ?$link=mysql_connect('192.168.182.142','phptest','123456');
# if ($link)
#? ? ? ? ? ? ? echo "Successfuly";
# else
?#? ? ? ? ? ? ?echo "Faile";
# mysql_close();
# ?>
測試的時候如果發(fā)現為faile,則檢查數據庫授權結果
5.業(yè)務上線
購買服務器/云主機
購買域名&ip
上傳APP
產品交付:回復工單
三、php-fpm配置
1.了解php-fpm相關配置文件
核心配置文件:
# vim /etc/php.ini
# date.timezone=PRC? ? ? ? #設置PHP的時區(qū)
# open_basedir????????????????? ?#設置php腳本允許訪問的目錄
全局配置文件:
# vim /etc/php-fpm.conf
# pid = /run/php-fpm/php-fpm.pid? ? ?# 設置pid文件的位置
#?error_log = log/php-fpm.log? ? ? ? ?#? 記錄錯誤日志的文件
#?log_level = notice #? 記錄日志的等級? ? ? alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.
# process.max = 3? ? ? ? ?#????process.max: 控制子進程最大數的全局變量, 后邊的設置子進程數量的指令受到這個值的限制, 0表示無限制
# daemonize = yes? ? ?# 將fpm轉至后臺運行
擴展配置文件
#????vim /etc/php-fpm.d/www.conf
# user = nginx? ? ? ? ? #? 設置用戶和用戶組
# listen.allowed_clients = 127.0.0.1? ##允許訪問FastCGI進程的IP,設置any為不限制IP,如果要設置其他主機的nginx也能訪問這臺FPM進程,listen處要設置成本地可被訪問的IP。默認值是any。每個地址是用逗號分隔. 如果沒有設置或者為空,則允許任何服務器請求連接
# listen = 127.0.0.1:9000? ? # fpm監(jiān)聽端口,即nginx中php處理的地址,一般默認值即可。可用格式為: 'ip:port'
#? slowlog = /var/log/php-fpm/$pool-slow.log? ? ? #? 開啟慢日志
#? pm = dynamic? ? ? ?# 動態(tài)模式進程管理開啟
# start_servers=5? ? ?#? 最初開啟多少進程
# min_spare_server =5? ? #??最小的多余進程數。最少空閑。用戶訪問會消耗掉進程。然后為了滿足后續(xù)游湖隨時隨地開啟進程保持空閑數為5。
# max_children = 50? ? ? #? 最大進程數:max_children是PHP-FPM Pool 最大的子進程數,他數值取決于你的服務器內存。 假設你打算給10G內存給當前配置的PHP-FPM Pool,一般一個PHP請求占用內存10M-40M,我們按站點每個PHP請求占用內存25M,這樣max_children = 10G/25M = 409。所以,這個值可以根據情況算出來
# max_spare_servers=10? # 最大的多余進程
# max_requests = 500? ? # 每個子進程能響應的請求數量,到達此數字,該PHP進程就被釋放掉了。
2.初始化php-fpm
初始化前先觀察php存在的進程
# ps aux | grep php?
進入全局配置文件設置生產環(huán)境下常用數值
# vim /etc/php-fpm.d/www.conf
# pm = dynamic
# pm.start_servers = 32
# pm.max_children = 512
# pm.min_spare_servers = 32
# pm.max_spare_servers = 64
# pm.max_requests = 1500
# dynamic:啟動動態(tài)管理模式
# start_servers:初始啟動32個進程
# max_children:最大進程數。(子進程數會在最大和最小數范圍中變化)512個進程數是在大于16G內存的前提下。
# min_spare:隨著用戶訪問的增加,保持32個空閑進程。
# max_spare:隨著用戶離去。殺死大量空閑進程來節(jié)約資源。
max_requests:是每個子進程重生之前處理的請求數, 默認值為unlimited(為1024)
重啟php-fpm
# systemctl restart php-fpm
啟動php狀態(tài)監(jiān)控頁面功能
啟動測試頁功能:
# vim /etc/php-fpm.d/www.conf
#?pm.status_path = /php_status
nginx配置頁面轉發(fā)
# vim /etc/nginx/conf.d/default.conf
# location = /php_status {
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_param SCRIPT_FILENAME
# $fastcgi_script_name;
# include fastcgi_params;
# }
啟動瀏覽器,訪問測試頁:

四、Nginx Rewrite
什么是Rewrite?
1. URL Rewrite最常見的應用是URL偽靜態(tài)化,是將動態(tài)頁面顯示為靜態(tài)頁面方式的一種技術。比如
http://www.123.com/news/index.php?id=123 使用URLRewrite 轉換后可以顯示為 http://www.123
.com/news/123.html對于追求完美主義的網站設計師,就算是網頁的地址也希望看起來盡量簡潔明快。
理論上,搜索引擎更喜歡靜態(tài)頁面形式的網頁,搜索引擎對靜態(tài)頁面的評分一般要高于動態(tài)頁面。所
以,UrlRewrite可以讓我們網站的網頁更容易被搜索引擎所收錄。
2. 從安全角度上講,如果在URL中暴露太多的參數,無疑會造成一定量的信息泄漏,可能會被一些黑客
利用,對你的系統(tǒng)造成一定的破壞,所以靜態(tài)化的URL地址可以給我們帶來更高的安全性。
3. 實現網站地址跳轉,例如用戶訪問360buy.com,將其跳轉到jd.com。例如當用戶訪問tianyun.com的
80端口時,將其跳轉到443端口。
Rewrite參考示例
一、需求:當用戶訪問http://192.168.182.142/abc/a/1.html 地址時,通過redirect 重定向至http://192.168.182.142/ccc/bbb/2.html? ? ? ? ? ?做這個示例的話其實不需要/abc/a/1.html存在了,因為不管有沒有他都會重定向到/ccc/bbb/2.html這里面,但是為了實驗起見? ? ? ? ? ?還是要創(chuàng)建一下這個目錄,因為生產環(huán)境中必然也會有這個,首先創(chuàng)建目錄與文件:


然后,就是修改配置文件,在server框架里面再添加location:
# vim /etc/nginx/conf.d/default.conf
#? location /abc {
#? rewrite .* /ccc/bbb/2.html permanent;
#? }
然后重啟服務并測試頁面:
# systemctl restart nginx
在瀏覽器里輸入原url:http://192.168.182.142/abc/a/1.html? ?然后會發(fā)現已經轉發(fā)到/ccc/bbb/2.html 這上面去了:

二、需求:location { rewrite } 只能替換url中的目錄路徑,使用if (){rewrite}可以替換協(xié)議主機目錄全部能容。將? ? ? ? ? ? ? ????????http://www.wangmouren.com換http://jd.com
首先,先給虛擬機與真實機做解析,注釋掉上面的實驗,完成之后修改配置文件:
# vim /etc/nginx/conf.d/default.conf
?在location里面添加:?
#? ?if ( $host ~* wangmouren.com ) {
#? ? ? ? rewrite .*? ? ? http://jd.com permanent;
#? ? ? ? }
然后,重啟服務,測試頁面:
# systemctl restart nginx
在瀏覽器中輸入http://wangmouren.com就會自動跳轉到京東頁面了:

三、需求:有時候網站被黑客攻擊,他有可能給機器傳上一個腳本文件,但是運行不了(賬號只有寫的權限),他可以通過瀏覽器? ? ? ? ? ? ? ? ????網頁來運行這個文件,我們可以把瀏覽器當遇到這個文件的時候,直接給他重寫成403,給他扔掉.
首先,在/usr/share/nginx/html/里面創(chuàng)建一個1.sh文件
進入配置文件在server里面加上
???????#????location ~* \.sh$ {? ? ? ????????????????#~* \.sh : 像是以*.sh結尾的文件? \ :轉義.
? ? ? ?#? ? ? ? return 403;? ? ? ? ? ????????????????#return和rewrite的結果是一樣的
? ? ? ?#? ? ? ? ? ? }
然后重啟服務,訪問頁面http://wangmouren.com/1.sh 會發(fā)現已經把這個文件重寫成403了:

若有問題咨詢歡迎大家聯(lián)系我:
郵箱:Wangmouren1997@163.com
QQ:1586787265