Nginx優化、LNMP動靜分離


    Nginx 以事件驅動(epoll)的方式編寫,因此有很是好的性能,同時也是一個很是高效的反向代理、負載平衡。可是 Nginx 並不支持 cgi 方式運行,緣由是能夠減小所以帶來的一些程序上的漏洞。因此必須使用 FastCGI 方式來執行 PHP 程序。因爲 Nginx 自己的一些優勢,輕量,開源,易用,愈來愈多的公司使用 nginx 做爲本身公司的 web 應用服務器javascript



1、Nginx 的優化
php

    下載 nginx 的源碼包:http://nginx.orgcss

一、編譯安裝前優化(更改源碼隱藏軟件名稱和版本號)html

[root@www ~]# yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel前端

[root@www ~]# tar zxf nginx-1.14.0.tar.gzjava

[root@www ~]# cd nginx-1.14.0/node

[root@www nginx-1.14.0]# vim src/core/nginx.hmysql

#define NGINX_VERSION "7.0"   //第 13 行,此行修改的是你想要的版本linux

#define NGINX_VER "IIS/" NGINX_VERSION   //第 14 行 ,此行修改的是你想修改的軟件名稱nginx


[root@www nginx-1.14.0]# vi src/http/ngx_http_header_filter_module.c

static char ngx_http_server_string[] = "Server: IIS" CRLF;     //第 49 行,修改 HTTP 頭信息中的 connection 字段,防止回顯具體版本號


[root@www nginx-1.14.0]# vi src/http/ngx_http_special_response.c   

static u_char ngx_http_error_tail[] =

"<hr><center>IIS</center>" CRLF   //第36行,隱藏 http 錯誤碼的返回


二、安裝 ngnix

[root@www ~]# groupadd -r www    #添加 www 組

[root@www ~]# useradd -r -g www  -s /sbin/nologin  www   #建立nginx運行帳戶www並加入到www 組

[root@www nginx-1.14.0]# ./configure --prefix=/usr/local/nginx

--with-http_dav_module       #增長 PUT,DELETE,MKCOL:建立集合,COPY 和 MOVE 方法

--with-http_stub_status_module     #獲取 Nginx 的狀態統計信息

--with-http_addition_module      #做爲一個輸出過濾器,支持不徹底緩衝,分部分相應請求

--with-http_sub_module       #容許一些其餘文本替換 Nginx 相應中的一些文本

--with-http_flv_module         #提供支持 flv 視頻文件支持

--with-http_mp4_module     #提供支持 mp4 視頻文件支持,提供僞流媒體服務端支持

--with-pcre                           #啓用 pcre

--with-http_ssl_module        #啓用 ngx_http_ssl_module

--with-http_gzip_static_module      #使用 zlib 壓縮庫

--user=www --group=www


[root@www nginx-1.14.0]# make && make install

[root@www nginx-1.14.0]# ln -s /usr/local/nginx  /sbin/nginx /usr/local/sbin/   #優化路徑

[root@www nginx-1.14.0]# nginx    #啓動nginx


[root@www ~]# curl -I http://127.0.0.1    #測試是否隱藏了版本和軟件名

HTTP/1.1 200 OK

Server: IIS/7.0


[root@www ~]# nginx -h

nginx version: IIS/7.0


三、nginx 配置項優化

(1):nginx 運行工做進程數優化

[root@www ~]# vi /usr/local/nginx1.10/conf/nginx.conf     (4核配置)

worker_processes 4;    #Nginx  運行 工做置 進程個數,通常咱們設置 CPU  的核心或者核心數 x2

worker_cpu_affinity 0001 0010 0100 1000;    #Nginx 運行 CPU 親和力 


好比 8 核配置

worker_processes 8;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

worker_processes 最多開啓 8 個,8 個以上性能提高不會再提高了,並且穩定性變得更低,因此 8 個進程夠用了。


worker_rlimit_nofile 65535;      #更改worker進程的最大打開文件數限制,最好與 ulimit -n的值保持一致。



(2) nginx事件處理模型

[root@www ~]# vi /usr/local/nginx1.10/conf/nginx.conf 

events {

use epoll;        #採用 epoll 事件模型,處理效率高

worker_connections 65535;     #單個 worker 進程容許客戶端最大鏈接數,實際最大值就是 worker 進程數乘以 work_connections

multi_accept on;        #告訴 nginx 收到一個新鏈接通知後接受盡量多的鏈接

}


http {

include mime.types;        #媒體類型, include 只是一個在當前文件中包含另外一個文件內容的指令

default_type application/octet-stream;       #默認媒體類型

……

sendfile on;            #開啓高效文件傳輸模式,若是用來進行下載等應用磁盤 IO 重負載應用,可設置爲off,以平衡磁盤與網絡 I/O 處理速度,下降系統的負載。

tcp_nopush on;        #必須在 sendfile 開啓模式纔有效,防止網路阻塞,積極的減小網絡報文段的數量

……


(4) 鏈接超時時間

主要目的是保護服務器資源,CPU,內存,控制鏈接數,由於創建鏈接也是須要消耗資源的

keepalive_timeout 60;    #客戶端鏈接保持會話超時時間,超過這個時間,服務器斷開這個連接

tcp_nodelay on;             #防止網絡阻塞,不過要包涵在 keepalived 參數纔有效

client_header_buffer_size 4k;       #客戶端請求頭部的緩衝區大小

open_file_cache max=102400 inactive=20s;       #打開緩存的同時也指定了緩存最大數目,以及緩存的時間。咱們能夠設置一個相對高的最大時間,這樣咱們能夠在它們不活動超過20秒後清除掉

open_file_cache_valid 30s;     #指多長時間檢查一次緩存的有效信息

open_file_cache_min_uses 1;   #定義了open_file_cache中指令參數不活動時間期間裏最小的文件數。

client_header_timeout 15;      #設置請求頭的超時時間。咱們也能夠把這個設置低些,若是超過這個時間沒有發送任何數據,nginx 將返回 request time out 的錯誤

client_body_timeout 15;         #設置請求主體的超時時間。超過期間,返回和上面同樣的錯誤

reset_timedout_connection on;    #告訴 nginx 關閉不響應的客戶端鏈接。這將會釋放那個客戶端所佔有的內存空間。

send_timeout 15;      #指定客戶端的響應超時時間。這個設置不會用於整個轉發器,而是在兩次客戶端讀取操做之間。若是在這段時間內,客戶端沒有讀取任何數據,nginx就會關閉鏈接

server_tokens off;      #並不會讓 nginx 執行的速度更快,但它能夠關閉在錯誤頁面中的 nginx 版本數字,這樣對於安全性是有好處的

client_max_body_size 10m;     #上傳文件大小限制




(5)fastcgi  調優

fastcgi_connect_timeout 600;     #指定鏈接到後端 FastCGI 的超時時間

fastcgi_send_timeout 600;         #向 FastCGI 傳送請求的超時時間

fastcgi_read_timeout 600;         #指定接收 FastCGI 應答的超時時間

fastcgi_buffer_size 64k;            #指定讀取 FastCGI 應答第一部分須要用多大的緩衝區,默認的緩衝區大小爲 fastcgi_buffers 指令中的每塊大小,能夠將這個值設置更小

fastcgi_buffers 4 64k;              #指定本地須要用多少和多大的緩衝區來緩衝 FastCGI 的應答請求,分配 4 個 64KB 的緩衝區來緩存,若是頁面大小大於 256KB,那麼大於 256KB 的部分會緩存到 fastcgi_temp_path 指定的路徑中,通常這個值應該爲站點中 php腳本所產生的頁面大小的中間值

fastcgi_busy_buffers_size 128k;    #建議設置爲 fastcgi_buffers 的兩倍

fastcgi_temp_file_write_size 128k;     #在寫入 fastcgi_temp_path 時將用多大的數據塊,默認值是 fastcgi_buffers 的兩倍,該數值設置小時,若負載上來時可能報 502 Bad Gateway

fastcgi_temp_path /usr/local/nginx/nginx_tmp;       #緩存臨時目錄

fastcgi_intercept_errors on;        # 這個指令指定是否傳遞 4xx 和 5xx 錯誤信息到客戶端,或者容許nginx 使用 error_page 處理錯誤信息

fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g;

 # fastcgi_cache 緩存目錄,能夠設置目錄層級,好比 1:2 會生成16*256 個子目錄,cache_fastcgi 是這個緩存空間的名字,cache 是用多少內存(這樣熱門的內容 nginx 直接放內存,提升訪問速度),inactive 表示默認失效時間,若是緩存數據在失效時間內沒有被訪問,將被刪除,max_size 表示最多用多少硬盤空間。



(6)gzip  調優

    使用 gzip 壓縮功能,可能爲咱們節約帶寬,加快傳輸速度,有更好的體驗,也爲咱們節約成本,可是須要消耗 CPU 的!

gzip on;                   #開啓壓縮功能

gzip_min_length 2k;           #設置容許壓縮的頁面最小字節數,建議設置成大於 1K,若是小與 1K 可能會越壓越大

gzip_buffers 4 32k;               #壓縮緩衝區大小,表示申請4個單位爲32K的內存做爲壓縮結果流緩存

gzip_http_version 1.1;         #壓縮版本,用於設置識別 HTTP 協議版本,默認是 1.1

gzip_comp_level 6;             #壓縮比例,用來指定 GZIP 壓縮比,1 壓縮比最小,處理速度最快,9 壓縮比最大,傳輸速度快,可是處理慢,也比較消耗 CPU 資源

gzip_types  text/plain  text/css  text/javascript  application/json  application/javascript application/x-javascript application/xml;

 #用來指定壓縮的類型,‘text/html’類型默認壓縮,設置哪壓縮種文本文件可參考 conf/mime.types

gzip_vary on;     #vary header 支持,該選項可讓前端的緩存服務器緩存通過 GZIP 壓縮的頁面,例如用 Squid 緩存通過 nginx 壓縮的數據

gzip_proxied any;      #nginx反向代理的時候啓用,無條件啓用壓縮


(7) expires 緩存調優

     緩存,主要針對於圖片,css,js 等元素更改機會比較少的狀況下使用,特別是圖片,佔用帶寬大,咱們徹底能夠設置圖片在瀏覽器本地緩存 365d,css,js,html 能夠緩存個 10 來天,

     這樣用戶第一次打開加載慢一點,第二次,就很是快了!緩存的時候,咱們須要將須要緩存的拓展名列出來, Expires 緩存配置在server字段裏面

優勢

(1)expires 能夠下降網站購買的帶寬,節約成本 

(2)同時提高用戶訪問體驗 

(3)減輕服務的壓力,節約服務器成本,是 web 服務很是重要的功能。 

缺點: 被緩存的頁面或數據更新了,用戶看到的可能仍是舊的內容,反而影響用戶體驗。

解決辦法: 第一個縮短緩存時間,例如:1 天,但不完全,除非更新頻率大於 1 天;第二個對緩存的對象更名。

location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {          #匹配的文件類型

        expires 30d;                                               #緩存時間

        #log_not_found off;                   #是否在 error_log 中記錄不存在的錯誤

        access_log off;                            # 是否在 access_log 中記錄

        }

location ~* \.(js|css)$ {

        expires 7d;

        log_not_found off;

        access_log off;

        }



(8)防盜鏈

     防止別人直接從你網站引用圖片等連接,消耗了你的資源和網絡流量,那麼咱們的解決辦法由幾種:

 1:水印,品牌宣傳,你的帶寬,服務器足夠 

2:防火牆,直接控制,前提是你知道 IP 來源 

3:防盜鏈策略 下面的方法是直接給予 404 的錯誤提示

location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {       #匹配的文件類型

        valid_referers none blocked www.ysf.com ysf.com;             #不阻止的域名或IP,通常寫本機地址

        if ($invalid_referer) {                                                             #若是匹配到防盜鏈的類型

                #return 302 http://www.ysf.com/img/nolink.jpg;        #跳轉到指定的網頁 

                return 404;                                                                #返回404錯誤代碼

                break;

                }

        access_log off;

        }



(9)內核參數優化

fs.file-max = 999999      #這個參數表示進程(好比一個 worker 進程)能夠同時打開的最大句柄數,這個參數直線限制最大併發鏈接數

net.ipv4.tcp_max_tw_buckets = 6000   #這個參數表示操做系統容許 TIME_WAIT 套接字數量的最大值,若是超過這個數字,TIME_WAIT 套接字將馬上被清除並打印警告信息。該參數默認爲 180000,過多的 TIME_WAIT 套接字會使 Web 服務器變慢。

注:主動關閉鏈接的服務端會產生 TIME_WAIT 狀態的鏈接

net.ipv4.ip_local_port_range = 1024 65000      #容許系統打開的端口範圍。

net.ipv4.tcp_tw_recycle = 1           #啓用 timewait 快速回收。

net.ipv4.tcp_tw_reuse = 1         #開啓重用。容許將 TIME-WAIT sockets 從新用於新的 TCP 鏈接。這對於服務器來講頗有意義,由於服務器上總會有大量 TIME-WAIT 狀態的鏈接。

net.ipv4.tcp_keepalive_time = 30           #這個參數表示當 keepalive 啓用時,TCP 發送 keepalive 消息的頻度。默認是 2 小時,若將其設置的小一些,能夠更快地清理無效的鏈接。

net.ipv4.tcp_syncookies = 1     #開啓 SYN Cookies,當出現 SYN 等待隊列溢出時,啓用 cookies 來處理。

net.core.somaxconn = 40960          #web 應用中 listen 函數的 backlog 默認會給咱們內核參數的net.core.somaxconn 限制到 128,而 nginx 定義的 NGX_LISTEN_BACKLOG 默認511,因此有必要調整這個值。

net.core.netdev_max_backlog = 262144    #每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目。

net.ipv4.tcp_max_syn_backlog = 262144      #這個參數標示 TCP 三次握手創建階段接受 SYN 請求隊列的最大長度,默認爲 1024,將其設置得大一些可使出現 Nginx 繁忙來不及accept 新鏈接的狀況時,Linux 不至於丟失客戶端發起的鏈接請求。

net.ipv4.tcp_rmem = 10240 87380 12582912  #這個參數定義了 TCP 接受緩存(用於 TCP 接受滑動窗口)的最小值、默認值、最大值。

net.ipv4.tcp_wmem = 10240 87380 12582912  :這個參數定義了 TCP 發送緩存(用於 TCP 發送滑動窗口)的最小值、默認值、最大值。

net.core.rmem_default = 6291456  :這個參數表示內核套接字接受緩存區默認的大小。

net.core.wmem_default = 6291456  :這個參數表示內核套接字發送緩存區默認的大小。

net.core.rmem_max = 12582912  :這個參數表示內核套接字接受緩存區的最大大小。

net.core.wmem_max = 12582912  :這個參數表示內核套接字發送緩存區的最大大小。

net.ipv4.tcp_syncookies = 1  :該參數與性能無關,用於解決 TCP 的 SYN ×××。


下面貼一個完整的內核優化設置:

fs.file-max = 999999

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_rmem = 10240 87380 12582912

net.ipv4.tcp_wmem = 10240 87380 12582912

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog = 262144

net.core.somaxconn = 40960

net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keepalive_time = 30

net.ipv4.ip_local_port_range = 1024 65000

執行 sysctl -p 使內核修改生效



(10)  關於系統鏈接數的優化:

linux 默認值 open files 爲 1024,說明 server 只容許同時打開 1024 個文件

使用 ulimit -a 能夠查看當前系統的全部限制值,使用 ulimit -n 能夠查看當前的最大打開文

件數。

新裝的 linux 默認只有 1024 ,看成負載較大的服務器時,很容易遇到 error: too many open files。所以,須要將其改大

在/etc/security/limits.conf 最後增長:

* soft nofile 65535

* hard nofile 65535

* soft noproc 65535

* hard noproc 65535

用戶從新登陸生效(ulimit -n)




2、部署 LNMP動靜分離

採用三臺CentOs 7.3

nginx:web處理靜態內容        ip:192.168.179.5

fpm   :處理動態內容               ip:192.168.179.6

mysql :數據庫                          ip:192.168.179.7


一、部署nginx

    前面已經搭建好了,就不在贅述了

   下面是 nginx.conf 的一個完整配置文件,配置介紹看上面就OK了

[root@www ~]# cat  /usr/local/nginx/conf/nginx.conf

user www www;

worker_processes 4;

worker_cpu_affinity  0001 0010 0100 1000;

worker_rlimit_nofile 65535; 

error_log   logs/error.log;

#error_log  logs/error.log notice;

#error_log  logs/error.log info;

pid  logs/nginx.pid;


events {

        use epoll;

        worker_connections 65535;

        multi_accept on;

        }


http {

        include mime.types;

        default_type application/octet-stream;

        #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

        # '$status $body_bytes_sent "$http_referer" '

        # '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log logs/access.log main;

        sendfile on;

        tcp_nopush on;

        keepalive_timeout 65;

        tcp_nodelay on;

        client_header_buffer_size 4k;

        open_file_cache max=102400 inactive=20s;

        open_file_cache_valid 30s;

        open_file_cache_min_uses 1;

        client_header_timeout 15;

        client_body_timeout 15;

        reset_timedout_connection on;

        send_timeout 15;

        server_tokens off;

        client_max_body_size 10m;


        fastcgi_connect_timeout 600;

        fastcgi_send_timeout 600;

        fastcgi_read_timeout 600;

        fastcgi_buffer_size 64k;

        fastcgi_buffers 4 64k;

        fastcgi_busy_buffers_size 128k;

        fastcgi_temp_file_write_size 128k;

        fastcgi_temp_path /usr/local/nginx/nginx_tmp;

        fastcgi_intercept_errors on;

        fastcgi_cache_path  /usr/local/nginx1.10/fastcgi_cache  levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g;


        gzip on;

        gzip_min_length 2k;

        gzip_buffers 4 32k;

        gzip_http_version 1.1;

        gzip_comp_level 6;

        gzip_types text/plain text/css text/javascript application/json application/javascript

        application/x-javascript application/xml;

        gzip_vary on;

        gzip_proxied any;


        server {

                listen 80;

                server_name www.ysf.com;

                #charset koi8-r;

                #access_log logs/host.access.log main;

                location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {        #防盜鏈規則

                        valid_referers none blocked 192.168.179.5;

                        if ($invalid_referer) {

                                #return 302 http://www.ysf.com/img/nolink.jpg;

                                return 404;

                                break;

                                }

                        access_log off;

                        }

                location / {             #靜態頁面規則

                        root html;

                        index  index.html index.htm;

                        }

                location ~ .*\.(php|php5)?$ {       #動態頁面規則                   

                        fastcgi_pass 192.168.179.6:9000;    #全部以php結尾的都反代到fpm服務器

                        fastcgi_index index.php;

                        fastcgi_param SCRIPT_FILENAME /data/$fastcgi_script_name;

                        #$fastcgi_script_name是請求的URL:/data目錄是php-fpm下定義的URL

                        include fastcgi_params;       #調用fastcgi_params配置文件

                    

                        fastcgi_cache cache_fastcgi;

                        fastcgi_cache_valid 200 302 1h;

                        fastcgi_cache_valid 301 1d;

                        fastcgi_cache_valid any 1m;

                        fastcgi_cache_min_uses 1;

                        fastcgi_cache_use_stale error timeout invalid_header http_500;

                        fastcgi_cache_key http://$host$request_uri;

                        }

 

               location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {      #緩存調優規則

                        expires 30d;

                        #log_not_found off;

                        access_log off;

                        }

                location ~* \.(js|css)$ {

                        expires 7d;

                        log_not_found off;

                        access_log off;

                        }

                location = /(favicon.ico|roboots.txt) {

                        access_log off;

                        log_not_found off;

                        }

                location /status {

                        stub_status on;

                        }

                #error_page 404 /404.html;

                # redirect server error pages to the static page /50x.html

                #

                error_page 500 502 503 504 /50x.html;

                location = /50x.html {

                        root html;

                        }

        }

}

[root@www ~]# nginx -s reload

[root@www ~]# firewall-cmd --add-port=80/tcp --permanent

[root@www ~]# firewall-cmd --reload 


二、部署MySQL

 爲了方便,使用二進制源碼包安裝

[root@mysql ~]# rpm -e mariadb-libs --nodeps        //卸載mariadb

[root@mysql ~]# groupadd -r mysql

[root@mysql ~]# useradd -r -g mysql -s /bin/false  mysql

[root@mysql ~]# tar zxf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 

[root@mysql ~]# mv mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/mysql

[root@mysql ~]# mkdir /usr/local/mysql/data

[root@mysql ~]# chown -R mysql:mysql /usr/local/mysql/

[root@mysql ~]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

[root@mysql ~]# source /etc/profile


[root@mysql ~]#  vim /etc/my.cnf

[client]

    socket = /usr/local/mysql/mysql.sock

[mysqld]

    basedir = /usr/local/mysql

    datadir = /usr/local/mysql/data

    port = 3306

    server_id = 1

    socket = /usr/local/mysql/mysql.sock

    log-error = /usr/local/mysql/data/mysql.log

    


[root@mysql ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data

[root@mysql ~]# cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

[root@mysql ~]# chmod +x   /etc/init.d/mysqld 

[root@mysql ~]# chkconfig --add mysqld 

[root@mysql ~]# systemctl daemon-reload 

[root@mysql ~]# systemctl enable mysqld

[root@mysql ~]# systemctl start mysqld

[root@mysql ~]# firewall-cmd --add-port=3306/tcp --permanent

[root@mysql ~]# firewall-cmd --reload 

[root@mysql ~]# mysqladmin    -u   root   password  'pwd123'


建立用於 php 服務器鏈接的 mysql 測試帳戶

[root@mysql ~]# mysql -uroot -p'pwd123' -e "grant all on *.* to test@'%' identified by 'pwd123'"




三、安裝 php

    編譯安裝 php

[root@php ~]# yum -y install libxml2-devel libcurl-devel openssl-devel bzip2-devel  #解決依賴關係

[root@php ~]# tar zxf libmcrypt-2.5.7.tar.gz

[root@php ~]# cd libmcrypt-2.5.7/

[root@php libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install


[root@php ~]# tar zxf php-5.6.27.tar.gz

[root@php ~]# cd php-5.6.27/

[root@php  php-5.6.27]#  ./configure  --prefix=/usr/local/php

--with-mysql=mysqlnd

--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd 

--with-openssl --enable-fpm --enable-sockets

--enable-sysvshm --enable-mbstring 

--with-freetype-dir --with-jpeg-dir 

--with-png-dir --with-zlib

--with-libxml-dir=/usr  --enable-xml  

--with-mhash  --with-mcrypt=/usr/local/libmcrypt

--with-config-file-path=/etc  

--with-config-file-scan-dir=/etc/php.d  

--with-bz2 --enable-maintainer-zts

[root@php php-5.6.27]# make && make install


[root@php php-5.6.27]# cp php.ini-production /etc /php.ini    # php 配置文件

[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm   #啓動腳本文件

[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm

[root@php php-5.6.27]# chkconfig --add php-fpm

[root@php php-5.6.27]# chkconfig php-fpm on


[root@php ~]# cd /usr/local/php/etc/       # php-fpm 配置文件

[root@php ~]#  cp php-fpm.conf.default php-fpm.conf

[root@php ~]# vi /usr/local/php5.6/etc/php-fpm.conf

    pid = run/php-fpm.pid

    listen = 0.0.0.0:9000

    pm.max_children = 50

    pm.start_servers = 5

    pm.min_spare_servers = 5

    pm.max_spare_servers = 35


[root@php ~]# service php-fpm start

[root@php ~]# firewall-cmd --permanent --add-port=9000/tcp

[root@php ~]# firewall-cmd --reload

[root@php ~]# mkdir  /data  #建立目錄,用於存放動態網頁文件


[root@php ~]# cat /data/index.php     #建立php的測試頁

<?php

phpinfo();

?>


[root@php ~]# cat /data/test.php 

<?php

$link=mysql_connect('192.168.179.7','test','123456');

if ($link)echo "connection success......";

mysql_close();

?>


測試訪問網頁

(1)成功訪問靜態頁面

楊書凡51.png


(2)成功訪問動態頁面

楊書凡52.png


(3)看到這三個測試頁說明 nginx、php、mysql 之間能夠協同工做了

楊書凡50.png



四、部署Discuz論壇

(1)php服務器

[root@php ~]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip

[root@php ~]# mv Discuz_7.0.0_FULL_SC_UTF8/upload/     /data/bbs

[root@php ~]#  cd  /data/bbs

[root@php bbs]#  chown -R  nobody  config.inc.php  attachments/  forumdata/ uc_client/data/cache/ templates/

[root@php bbs]#  chmod -R 777 uc_server/data/

[root@php bbs]#  vim /etc/php.ini

    short_open_tag = On

[root@php bbs]#  service php-fpm restart

[root@php bbs]#  scp -r /data/bbs 192.168.179.5:/usr/local/nginx/html/   #將Discuz文件複製到nginx


(2)nginx服務器也須要有靜態文件

[root@nginx ~]#  cd  /usr/local/nginx/html/bbs

[root@nginx bbs]#  chown -R  daemon  config.inc.php  attachments/  forumdata/ uc_client/data/cache/ templates/


(3)在mysql服務器上建立 bbs 數據庫及受權賬戶

mysql> create database bbsdb;

mysql> grant all on bbsdb.* to bbs@'%' identified by 'pwd123';


(4)輸入 httd://192.168.179.5/bbs/install 便可安裝

楊書凡44.png


(5)填寫數據庫的相關信息

楊書凡45.png


(6)安裝完成,出現如下界面,發現只有靜態頁面能夠顯示

     出現這種狀況是因爲 php 服務器安裝了 discuz 以後致使程序發生變化從而致使nginx和php的程序不一致,只須要手動把php的 discuz安裝文件和 nginx 進行一次同步便可

楊書凡48.png


楊書凡47.png



(7)同步install.lock文件到nginx,刷新如下就OK了

[root@php ~]#  scp /data/bbs/*  192.168.179.5:/usr/local/nginx/html/bbs/

楊書凡53.png

相關文章
相關標籤/搜索