Nginx實戰(zhàn)架構篇

一、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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容