nginx介紹:
nginx是一款高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。因它的穩定性。豐富的功能集,示例配置檔案和低系統資源的消耗而聞名。是一款輕量級的web伺服器/反向代理伺服器及電子郵件代理伺服器,同時nginx也是一個非常優秀的郵件代理伺服器。其特點為占有記憶體少,并發能力強,事實上nginx的并發能力确實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站的使用者有:百度,京東,新浪,騰訊,網易,淘寶等。
nginx和apache對比
1.nginx相對于apache的優點
輕量級,同樣的web伺服器,比apache占有更少的資源和記憶體
抗并發,nginx處理請求是異步非阻塞式,而apache則是阻塞式。在高并發下,nginx能保持弟子員,低消耗,高性能
高度子產品化設計,編寫高性能子產品資源豐富
代理功能強大
2.apache對于nginx的優點
比nginx的rewrite(服務其的重寫脈沖技術,支援URL重寫)更強大
子產品超多,現有的子產品基本能滿足所有需求
比nginx穩定,bug較少
3.nginx于apache應用場景對比
apache适合跑動态,而nginx時和跑靜态和反向,但若靜态檔案較少,apache的select子產品比nginx的epoll子產品更好
nginx适用于IO米即型服務,apache适合與CPU密集型服務
最好兩者結合,例如,lnmp架構,nginx做前端伺服器,處理靜态檔案請求,apache做後端伺服器,當客戶發出動态檔案請求時,nginx的反向代理功能将請求轉發到apache.
4.輕量級,高并發原因:
對于apache,每個請求都獨占一個工作線程,并發數在幾千,占用記憶體,CPU,降低性能
對于nginx,一個程序隻有一個主線程,通過異步非阻塞式時間處理機制,實作了循環處理多個準備好的事件,進而實作輕量級,高并發。
5.直接說明
apache屬于專一性服務
nginx屬于分階段進行,節省時間
Mysql是一個小型關系型資料庫管理系統。
PHP是一種在伺服器端執行的嵌入HTML文檔的腳本語言。
mysql,php,nginx源碼編譯安裝:
mysql
1)解壓安裝mysql
tar zxf mysql-boost-5.7.17.tar.gz
2)安裝cmake(相當于configure),用來編譯mysql
yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm 同時解決依賴性
3)cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \ #安裝目錄
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \ #資料庫存放目錄
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \ #Unix socket 檔案路徑
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #安裝 myisam 存儲引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安裝 innodb 存儲引擎
-DDEFAULT_CHARSET=utf8 \ #使用 utf8 字元
-DDEFAULT_COLLATION=utf8_general_ci \ #校驗字元
-DEXTRA_CHARSETS=all #安裝所有擴充字元集
4)根據提示解決依賴性問題
需要安裝包:yum install -y gcc gcc-c++ ncurses-devel
##報錯##
CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=
This CMake script will look for boost in . If it is not there,
it will download and unpack it (in that directory) for you.
If you are inside a firewall, you may need to use an http proxy:
export http_proxy=http://example.com:80
‘重新編譯時,需要清除原來的對象檔案和緩存資訊’
‘make clean;rm -fr CmakeCache.txt’
##解決##
缺少 -DWITH_BOOST= 參數 -DWITH_BOOST=boost/boost_1_59_0/ (可Tab補齊)
後面編譯會有一個warning:
CMake Warning at cmake/bison.cmake:20 (MESSAGE):
Bison executable not found in PATH
Call Stack (most recent call first):
sql/CMakeLists.txt:514 (INCLUDE)
##解決##
yum install -y bison
5)make && make install (過程較長) ##如果make還有問題,删除原來的目錄,重新解壓編譯
6)複制啟動腳本到/etc/init.d/
[[email protected] support-files]# pwd
/root/mysql-5.7.17/support-files
[[email protected] support-files]# cp mysql.server /etc/init.d/mysqld
7)将原來的/etc/my.cnf備份,重新拷貝安裝包裡的過去
[[email protected] etc]# cp my.cnf my.cnf.bak
[[email protected] support-files]# cp my-default.cnf /etc/my.cnf
修改配置:
basedir = /usr/local/lnmp/mysql
datadir = /usr/local/lnmp/mysql/data
socket = /usr/local/lnmp/mysql/data/mysql.sock
8)添加使用者群組:
groupadd -g 27 mysql
useradd -u 27 -g 27 mysql (id=27是因為rpm預設安裝時mysql使用者的id為27,并非強制)
chown mysql.mysql /usr/local/lnmp/mysql -R (修改mysql目錄的權限,使其對mysql使用者可寫)
9)将mysql指令添加到環境變量
vim ~/.bash_profile
添加:
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
生效:source ~/.bash_profile
初始化mysql:
mysqld --user=mysql --initialize(以mysql使用者身份初始化)
初始化會生成一個臨時密碼,用于登入mysql(要記住此密碼)
#如:‘2019-01-03T09:06:09.448851Z 1 [Note] A temporary password is generated for [email protected]: r#9VqAoA/au:’
10)為了安全,再将mysql目錄的所有者改為root
chown root /usr/local/lnmp/mysql -R
chown mysql /usr/local/lnmp/mysql/data -R ##資料目錄所有者必須是mysql,不然mysql使用者不能寫
11)啟動mysql:/etc/init.d/mysqld start
12)進入mysql:mysql -uroot -pr#9VqAoA/au: #使用剛才的臨時密碼
執行:show databases; 會報錯
需要執行:mysql_secure_installation,然後會提示是否啟用密碼檢測插件,直接回車不啟用,否則會要求密碼有大小寫和特殊字元等要求
剩餘全部選 y
mysql安裝配置完成
php
1)解壓:tar jxf php-5.6.35.tar.bz2
yum -y install bzip2
2)進入解壓後的目錄,開始編譯
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --with-pear --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
–with-config-file-path=/etc 指定php.ini位置
–with-MySQL=mysql安裝目錄,對mysql的支援
–with-MySQLi=mysqli檔案目錄,優化支援
–enable-fpm
PHP-FPM是一個PHP FastCGI管理器,是隻用于PHP的,它其實是PHP源代碼的一個更新檔,旨在将Fast-CGI程序管理整合進PHP包中。必須将它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。新版的PHP已經內建了php-fpm,在./configure的時候帶 –enable-fpm參數即可開啟PHP-FPM
#以上為php需要編譯的子產品,把剛才編譯mysql的參數要加進來,添加mysqlnd(這是mysql的驅動,php開發的)
–with-freetype-dir 打開對freetype字型庫的支援
–with-zlib 打開zlib庫支
#編譯時遇到的報錯就安裝:yum install -y libxml2-devel libcurl-devel
#沒有jpeglib.h檔案:yum whatprovides */jpeglib.h
#yum install -y libjpeg-turbo-devel-1.2.1-1.el6.x86_64
#yum install -y libpng-devel-1.2.49-1.el6_2.x86_64
#yum install -y freetype freetype-devel
#yum install -y net-snmp net-snmp-devel
3)編譯報錯,逐漸解決依賴性(rhel7可以向下相容6的包)
yum install -y re2c-0.13.5-1.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm libmcrypt-devel-2.5.8-9.el6.x86_64.rpm (系統鏡像沒有的3個包)
4)make && make install
5)編譯時添加了–with-fpm-user=nginx --with-fpm-group=nginx 參數
是以添加 nginx 使用者
6)拷貝更改配置檔案
[[email protected] etc]# pwd
/usr/local/lnmp/php/etc
[[email protected] etc]# cp php-fpm.conf.default php-fpm.conf
檢視配置檔案中以下幾項是否開啟:
user = nginx
group = nginx
pid = run/php-fpm.pid
7)拷貝更改php主配置檔案
[[email protected] php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
修改時區:date.timezone = Asia/Shanghai
8)拷貝php啟動腳本至/etc/init.d/
[[email protected] fpm]# pwd
/root/lnmp/php-5.6.35/sapi/fpm
[[email protected] fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
添加執行權限:chmod +x /etc/init.d/php-fpm
9)啟動php:/etc/init.d/php-fpm start
nginx
1)解壓nginx:tar zxf nginx-1.14.0.tar.gz
2)進入nginx解壓包:
vim src/core/nginx.h
修改:#define NGINX_VER “nginx/”(将此行末尾顯示nginx版本号的配置删除)
vim auto/cc/gcc
修改:
# debug
#CFLAGS="$CFLAGS -g" (将這2行注釋調,關閉debug)
3)編譯安裝nginx:
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx
根據提示解決依賴性 ##此處應該還需要安裝pcre-devel
4)make && make install
5)修改nginx配置檔案,開啟php子產品
vim
43 location / {
44 root html;
45 index index.php index.html index.htm; (添加php頁面)
46 }
65 location ~ .php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 include fastcgi.conf;
71 }
6)将nginx啟動腳本連結到/usr/local/sbin/
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
[[email protected] ~]# nginx -t ##檢測文法
[[email protected] ~]# nginx ##開啟nginx
7)嘗試通路:http://172.25.37.1 ##是nginx預設頁面
在nginx預設釋出目錄添加 index.php
vim /usr/local/lnmp/nginx/html/index.php
<?php phpinfo() ?>
#可以看到php的預設頁面
8)啟動nginx并通路:http://172.25.37.1
nginx安裝配置完成
Discuz論壇搭建
1)解壓 Discuz_X3.2_SC_UTF8.zip
unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/
#沒有unzip指令的話需要安裝:yum install -y unzip
2)将解壓後的upload目錄改名為bbs,便于通路
mv upload bbs
3)浏覽器通路:http://172.25.37.1/bbs
4)點選同意後會出現很多目錄不存在和不可寫的報錯
##解決##
[[email protected] bbs]# pwd
/usr/local/lnmp/nginx/html/bbs
chmod 777 config/ -R
chmod 777 data/ -R
chmod 777 uc_server/ uc_client/ -R
給以上目錄增權重限,再重新整理就可以了
5)選擇全新安裝—>填寫資料庫名(任意) 資料庫使用者名:root 資料庫密碼:自己設定的資料庫root使用者密碼
管理者帳号:admin 密碼:westos
6)下面會報資料庫連接配接錯誤:No such file or directory
##解決##
編輯php主配置檔案:vim /usr/local/lnmp/php/etc/php.ini
修改以下配置:
pdo_mysql.default_socket= /usr/local/lnmp/mysql/data/mysql.sock
mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
以上路徑為mysql安裝的目錄,根據自己的路徑填寫
重新加載php
/etc/init.d/php-fpm reload
7)再次重新整理頁面,還是報錯:Permission denied
##解決##
由于 nginx使用者 對于 /usr/local/lnmp/mysql/data 目錄沒有權限
是以:chmod 755 data/
再次重新整理,成功安裝
8)點選頁面中“管理中心”,會出現報錯:Please delete install/index.php via FTP!
##解決##
[[email protected] bbs]# pwd
/usr/local/lnmp/nginx/html/bbs/install
[[email protected] install]# rm -fr index.php
再重新整理頁面,成功
‘如果把nginx配置檔案中php子產品注釋掉,再重新整理頁面,會讓你下載下傳,這就是打開php子產品的原因’