任務列表:
12.1 LNMP架構介紹
12.2 MySQL安裝
12.3/12.4 PHP安裝
12.5 Nginx介紹
12.6 Nginx安裝javascript
擴展
Nginx爲何比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html
https://www.zhihu.com/question/64727674
apache和nginx工做原理比較 http://www.server110.com/nginx/201402/6543.html
概念瞭解:CGI,FastCGI,PHP-CGI與PHP-FPM https://www.awaimai.com/371.htmlphp
1、 LNMP架構介紹css
如今流行LNMP架構;他們的區別就是提供web服務爲apache和nginx,目前nginx發展迅速,取代apache指日可待。html
LAMP=linux+apache+mysql+phpjava
LNMP=linux+nginx+mysql+phpnode
和LAMP不一樣的是,提供web服務的是Nginx
而且php是做爲一個獨立服務存在的,這個服務叫作php-fpm
Nginx直接處理靜態請求,動態請求會轉發給php-fpmmysql
當咱們講LAMP的時候PHP是做爲一個模塊在Apache中,可是在LNMP中,PHP是一個服務,當用戶請求的時候nginx會把它交給php 而後對mysql進行交互!像這種靜態的,例如圖片或者html,nginx會直接處理,從而加快訪問速度! 談到速度,其實若是一個普通的站點你是看不到什麼效果的,可是若是要是訪問一個純靜態站點,nginx就能體現出它的優點!nginx的另一個優點得益於它的高併發支持!linux
2、MySQL安裝nginx
不管LAMP和LNMP架構中,M表明MySQL,都是獨立存在於架構中;所以LNMP的MySQL安裝步驟是和LAMP同樣的c++
安裝方法:http://www.javashuo.com/article/p-fbqrxxsn-k.html
若是已經安裝了,查看是否啓動,若是啓動,service mysqld stop 中止
在安裝目錄下把mysql目錄刪除
mysql的啓動腳本也刪除
3、PHP安裝
和LAMP安裝PHP方法有差異,須要開啓php-fpm服務
3.1 php編譯、安裝
cd /usr/local/src/
make clean 清除以前安裝的php5.6
下載: wget http://cn2.php.net/distributions/php-5.6.39.tar.gz 解壓 :tar -zxvf php-5.6.39.tar.gz cd php-5.6.39/ 進入目錄
php用到的安裝包能夠提早安裝:yum -y install epel-release wget gcc gcc-c++ libmcrypt-devel libmcrypt libcurl-devel libxml2-devel openssl-devel bzip2-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel
此時的php-5.6.39目錄,如同剛解壓的時候時候;此時經過./configure進行定製相關功能,使其生成makefile;
./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
若是報錯"make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1",在./configure腳本後面加上--disable-fileinfo
相關名稱釋義:
--prefix=指定安裝位置
--with-config-file-path=指定配置文件目錄
--enable-fpm=啓動fpm服務,必需要加
--with-fpm-user=指定用戶
--with-fpm-group=指定用戶組
--with-mysql=指定mysql的路徑
自動檢查過程當中,出現如下報錯:
需安裝 libcurl-devel安裝包,安裝完從新加載配置文件
yum install libcurl-devel
加載完成後 ,編譯安裝:make && make install
3.2 php相關信息
此時會在/usr/local目錄下,生成php-fpm新目錄
相比以前的php多了sbin和var目錄
ls /usr/local/php-fpm/sbin/ sbin下有php-fpm,sbin:實際上就是啓動php-fpm服務的目錄 ls /usr/local/php-fpm/var/ //var下有log日誌目錄和PID目錄,var:實際上就是存放PHP日誌的,固然這個咱們是能夠指定的;log: php日誌目錄,run:進程PID目錄
php-fpm 選項參數用法:-i -m -t
/usr/local/php-fpm/sbin/php-fpm -m //查看PHP模塊 /usr/local/php-fpm/sbin/php-fpm -i //查看PHP信息 /usr/local/php-fpm/sbin/php-fpm -t //測試PHP配置語法
php解壓目錄中的php.ini-production文件複製到php-fpm/etc/目錄中,而且重命名爲php.ini
cp php.ini-production /usr/local/php-fpm/etc/php.ini cd /usr/local/php-fpm/etc/
php.ini-development 適合在開發環境使用
php.ini-production 適合在生產環境使用(線上使用)
在php-fpm/etc/下有默認的php-fpm.conf.default配置文件,須要從新複製一份,方便試驗操做
vim php-fpm.conf //新建立php-fpm.conf
寫入以下內容:
[global] pid = /usr/local/php-fpm/var/run/php-fpm.pid error_log = /usr/local/php-fpm/var/log/php-fpm.log [www] listen = /tmp/php-fcgi.sock listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024
相關名稱釋義 [global]=定義全局參數 [www]=自定義模塊名字 listen = 監聽的地址 也可使用這樣的方式 listen = 127.0.0.1:9000 (port默認爲9000也能夠更改) listen.mode = 666 用來定義listen = /tmp/php-fcgi.sock的權限,只有這個sock打開的狀況下才生效
把解壓目錄下的啓動腳本sapi/fpm/init.d.php-fpm 複製到/etc/init.d下
cd /usr/local/src/php-5.6.39/ 首先進入到源碼包目錄 cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 複製到/etc/init.d下,更名爲php-fpm chmod 755 /etc/init.d/php-fpm 更改權限爲755 chkconfig --add php-fpm 增長服務 chkconfig php-fpm on 服務開啓啓動 service php-fpm start 開啓php-fpm服務 ps aux |grep php-fpm 查看php-fpm啓動信息
4、Nginx介紹
Nginx官網 nginx.org
Nginx應用場景:web服務、反向代理、負載均衡
Nginx著名分支,淘寶基於Nginx開發的Tengine,使用上和Nginx一致,服務名,配置文件名都同樣,和Nginx的最大區別在於Tenging增長了一些定製化模塊,在安全限速方面表現突出,另外它支持對js,css合併
Nginx核心+lua(開發語言)相關的組件和模塊組成了一個支持lua的高性能web容器openresty,參考http://jinnianshilongnian.iteye.com/blog/2280928
nginx特色:體積小、處理能力強、併發高、可擴展性好
5、Nginx安裝
5.1 Nginx編譯、安裝
下載配置安裝Nginx,並解壓
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.16.0.tar.gz 或者到nginx.org官網去下載最新的安裝包直接傳到服務器上 tar zxvf nginx-1.16.0.tar.gz 解壓
進入解壓目錄,進行./configure定製服務,使其生成makefile文件
cd nginx-1.16.0
./configure --prefix=/usr/local/nginx
make && make install 編譯安裝
5.2 Nginx相關目錄信息
cd /usr/local/nginx/
/usr/local/nginx/sbin/nginx -t -t 選項: 測試配置語法錯誤
/usr/local/nginx目錄下的子目錄:
5.3 Nginx配置
設置nginx腳本
在init.d目錄下,新建nginx腳本文件 vim /etc/init.d/nginx
複製以下內容(參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/etc_init.d_nginx )
#!/bin/bash # chkconfig: - 30 21 # description: http service. # Source Function Library . /etc/init.d/functions # Nginx Settings NGINX_SBIN="/usr/local/nginx/sbin/nginx" NGINX_CONF="/usr/local/nginx/conf/nginx.conf" NGINX_PID="/usr/local/nginx/logs/nginx.pid" RETVAL=0 prog="Nginx" start() { echo -n $"Starting $prog: " mkdir -p /dev/shm/nginx_temp daemon $NGINX_SBIN -c $NGINX_CONF RETVAL=$? echo return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc -p $NGINX_PID $NGINX_SBIN -TERM rm -rf /dev/shm/nginx_temp RETVAL=$? echo return $RETVAL } reload() { echo -n $"Reloading $prog: " killproc -p $NGINX_PID $NGINX_SBIN -HUP RETVAL=$? echo return $RETVAL } restart() { stop start } configtest() { $NGINX_SBIN -c $NGINX_CONF -t return 0 } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; configtest) configtest ;; *) echo $"Usage: $0 {start|stop|reload|restart|configtest}" RETVAL=1 esac exit $RETVAL
而後增長權限,以及啓動服務
chmod 755 /etc/init.d/nginx chkconfig --add nginx 增長服務 chkconfig nginx on 服務開啓啓動
編輯配置文件
進入nginx/conf/目錄下,把默認的配置文件做爲備份
mv nginx.conf nginx.conf.1
新建nginx.conf配置文件,並按下面寫入內容
vim nginx.conf //寫入以下內容(參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf)
user nobody nobody; worker_processes 2; error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 6000; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 3526; server_names_hash_max_size 4096; log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' ' $host "$request_uri" $status' ' "$http_referer" "$http_user_agent"'; sendfile on; tcp_nopush on; keepalive_timeout 30; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 8 4k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; client_max_body_size 10m; client_body_buffer_size 256k; client_body_temp_path /usr/local/nginx/client_body_temp; proxy_temp_path /usr/local/nginx/proxy_temp; fastcgi_temp_path /usr/local/nginx/fastcgi_temp; fastcgi_intercept_errors on; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_comp_level 5; gzip_http_version 1.1; gzip_types text/plain application/x-javascript text/css text/htm application/xml; server { listen 80; server_name localhost; index index.html index.htm index.php; root /usr/local/nginx/html; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; } } }
LNMP環境下Nginx中php-fpm的配置文件講解:http://www.okay686.cn/510.html
相關名詞,釋義
user nobody nobody; 運行服務的用戶是誰 worker_processes 2;定義子進程的數量 worker_rlimit_nofile 51200;最多能夠打開多少個文件 worker_connections 6000;容許最大的鏈接數 server; 下面對應的就是虛擬主機配置,每一個server對應一個虛擬主機 server_name localhost;定義網站的域名 root /usr/local/nginx/html;定義網站的根目錄 location ~ .php$;配置解析PHP fastcgi_pass unix:/tmp/php-fcgi.sock;監聽端口或者監聽socket,經過此命令去執行 fastcgi_pass 127.0.0.1:9000;(或者寫成這種方式,服務器IP地址+端口)
/usr/local/nginx/sbin/nginx -t 檢查是否出錯
啓動nginx服務 /etc/init.d/nginx start 啓動前80端口不能被佔用
ps aux |grep nginx //查看相關服務
配置完nginx,進行測試
curl localhost
上面訪問的頁面cat /usr/local/nginx/conf/nginx.conf 以下中配置
解析PHP
vim /usr/local/nginx/html/1.php //新建1.php頁面,寫入內容
curl localhost/1.php //進行測試,成功解析