筆記11(LNMP)
MySQL安裝
卸載原來的mysql步驟
第一步,先進入到src下:
cd /usr/local/src/
第二步,刪除
rm -rf /usr/local/mysql
rm -rf /etc/init.d/mysqld
cd /usr/local/src
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
cd /usr/local/mysql
useradd mysql
mkdir /data/
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
vi /etc/init.d/mysqld
定義basedir和datadir
/etc/init.d/mysqld start
PHP安裝
和LAMP安裝PHP方法有差別,需要開啟php-fpm服務
cd /usr/local/src/
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
tar zxf php-5.6.30.tar.gz
useradd -s /sbin/nologin php-fpm
cd php-5.6.30 (make clean可以吧以前的配置信息全部刪掉,讓他回到剛解壓完的狀態)
./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 && make install
cp php.ini-production /usr/local/php-fpm/etc/php.ini
vi /usr/local/php/etc/php-fpm.conf //寫入如下內容(參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/php-fpm.conf)
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
service php-fpm start
ps aux |grep php-fpm
nginx介紹
Nginx官網 nginx.org,最新版1.13,最新穩定版1.12
Nginx應用場景:web服務、反向代理、負載均衡
Nginx著名分支,淘寶基於Nginx開發的Tengine,使用上和Nginx一致,服務名,配置文件名都一樣,和Nginx的最大區別在於Tenging增加了一些定制化模塊,在安全限速方面表現突出,另外它支持對js,css合並
Nginx核心+lua相關的組件和模塊組成了一個支持lua的高性能web容器openresty,參考http://jinnianshilongnian.iteye.com/blog/2280928
Nginx安裝
cd /usr/local/src
wget http://nginx.org/download/nginx-1.12.1.tar.gz
tar zxf nginx-1.12.1.tar.gz
./configure --prefix=/usr/local/nginx
make && make install
編輯啟動腳本:vim /etc/init.d/nginx //復制如下內容(參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/etc_init.d_nginx )
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on
配置它的配置文件:先進去,cd /usr/local/nginx/conf/; 再拷貝,mv nginx.conf nginx.conf.bak
vim nginx.conf //寫入如下內容(參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf)
檢查一下有沒有出錯:/usr/local/nginx/sbin/nginx -t
啟動:/etc/init.d/nginx start
netstat -lntp |grep 80
測試php解析
vi /usr/local/nginx/html/1.php //加入如下內容
<?php
echo "test php scripts.";
?>
curl localhost/1.php
Nginx默認虛擬主機
進到:/usr/local/nginx/conf
編輯vim /usr/local/nginx/conf/nginx.conf //把最後一段server刪除,增加
include vhost/*.conf;
創建conf子目錄:mkdir /usr/local/nginx/conf/vhost
進到vhost下:cd vhost/
在創建一個比如aaa.com.conf,編輯
vim aaa.com.conf //加入如下內容
server
{
listen 80 default_server; // 有這個標記的就是默認虛擬主機
server_name aaa.com;
index index.html index.htm index.php;
root /data/wwwroot/default;
}
創建目錄(因為配置文件裏有這個目錄):
mkdir /data/wwwroot/default
然後進到這個目錄下:cd /data/wwwroot/default/
定義一個東西:vim index.html 在裏邊隨便寫一句:this is the default site.
或者用這種定向的方式寫入:echo “This is a default site.”>/data/wwwroot/default/index.html
寫完檢查一下有沒有錯誤/usr/local/nginx/sbin/nginx -t
從新加載(加上選項-s reload):/usr/local/nginx/sbin/nginx -s reload
測試一下看看是否顯示剛才定義的那句話:curl localhost
測試一下指定域名:curl -x127.0.0.1:80 123.com
Nginx用戶認證
在這個目錄下做操作:
cd /usr/local/nginx/conf/vhost
編輯配置文件:創建一個虛擬主機
vim /usr/local/nginx/conf/vhost/test.com.conf//寫入如下內容
server
{
listen 80;
server_name test.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
location /
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
}
下面是生成密碼文件:
如果你上邊安裝過Apache可以直接用這個命令:
-c是生成的意思,你要設置第二個就不用加了,要不他就會重置
/usr/local/apache2.4/bin/htpasswd -c /usr/local/nginx/conf/htpasswd awei
沒有就安裝一個yum install -y httpd 再用上邊的命令
測試一下/usr/local/nginx/sbin/nginx -t
重新加載:/usr/local/nginx/sbin/nginx -s reload
curl -x127.0.0.1:80 test.com 狀態碼為401說明需要認證
我們需要創建index.html目錄:
mkdir /data/wwwroot/test.com
echo “test.com”>/data/wwwroot/test.com/index.html
指定用戶,用-u用戶加密碼:
curl -uawei:123456789 -x127.0.0.1:80 test.com -I 訪問狀態碼變為200
編輯windows的hosts文件,然後在瀏覽器中訪問test.com會有輸入用戶、密碼的彈窗
針對指定目錄的用戶認證
location /admin/ 在後邊加目錄名字就行,這樣的話只有訪問他的時候才需要驗證
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
可以測試一下:創建一個測試頁面,用戶跟密碼根據自己的改
\
Nginx域名重定向
更改test.com.conf
在這個路徑下:cd /usr/local/nginx/conf/vhost
server
{
listen 80;
server_name test.com test1.com test2.com; 在後邊加上域名
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != ‘test.com‘ ) {//域名跳轉,如果不是test.com就讓他調轉過來
rewrite ^/(.*)$ http://test.com/$1 permanent;(301)
}
}
測試配置文件:/usr/local/nginx/sbin/nginx -t
重新加載:/usr/local/nginx/sbin/nginx -s reload
測試一下是否為301:curl -x127.0.0.1:80 test2.com/index.html -I
server_name後面支持寫多個域名,這裏要和httpd的做一個對比
permanent為永久重定向,狀態碼為301,如果寫redirect則為302
Nginx訪問日誌
日誌格式
打開主配置文件:vim /usr/local/nginx/conf/nginx.conf //搜索log_format 這一段就是用來定義日誌格式的
combined_realip:這是日誌個是的名字,可以隨便定義,這裏寫成什麽,後邊引用他時就寫成啥
nginx配置有個特點,他會認為什麽時候有分號;,才會結束
除了在主配置文件nginx.conf裏定義日誌格式外,還需要在虛擬主機配置文件中:
vi /usr/local/nginx/conf/vhost/test.com.conf
增加:access_log /tmp/test.com.log combined_reali;意思是把日誌放到一個目錄下
這裏的combined_realip就是在nginx.conf中定義的日誌格式名字
-t && -s reload
訪問一下:curl -x127.0.0.1:80 test2.com/index.html -I
查看一下日誌:cat /tmp/test.com.log
Nginx日誌切割
自定義shell 腳本
vim /usr/local/sbin/nginx_log_rotate.sh//寫入如下內容
#! /bin/bash
## 假設nginx的日誌存放路徑為/data/logs/
d=`date -d "-1 day" +%Y%m%d`
logdir="/data/logs"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
任務計劃
crontab -e 把下邊內容寫進去
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
靜態日誌不記錄日誌和過期時間
配置如下
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d;
access_log off;
}
location ~ .*\.(js|css)$
{
expires 12h;
access_log off;
}
模擬一下
先到這個目錄下:cd /data/wwwroot/test.com/
編輯:vi 1.gif 隨便寫點東西
編輯:vi 2.js 隨便寫點東西
測試一下:
curl -x127.0.0.1:80 test.com/1.gif
curl -x127.0.0.1:80 test.com/2.js
curl -x127.0.0.1:80 test.com/index.html
訪問完查看一下日誌:
cat /tmp/test.com.log 你會發現他只記錄了最後一條
Nginx防盜鏈
配置如下,可以和上面的配置結合起來
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
expires 7d;
valid_referers none blocked server_names *.test.com ; 定義白名單如果不匹配直接403
if ($invalid_referer) {
return 403;
}
access_log off;
}
測試:
curl -e "http://baidu.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif 403
curl -e "http://test.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif 200
Nginx訪問控制
需求:訪問/admin/目錄的請求,只允許某幾個IP訪問,配置如下:
location /admin/
{
allow 192.168.133.1;
allow 127.0.0.1;
deny all;
}
mkdir /data/wwwroot/test.com/admin/
echo “test,test”>/data/wwwroot/test.com/admin/1.html
-t && -s reload
curl -x127.0.0.1:80 test.com/admin/1.html -I
curl -x192.168.133.130:80 test.com/admin/1.html -I
可以匹配正則
location ~ .*(abc|image)/.*\.php$
{
deny all;
}
根據user_agent限制
if ($http_user_agent ~ ‘Spider/3.0|YoudaoBot|Tomato‘)
{
return 403;
}
deny all和return 403效果一樣
Nginx解析PHP的配置
配置如下:
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
fastcgi_pass 用來指定php-fpm監聽的地址或者socket
編輯完配置文件先不要重新加載,等測試中在加載,直接測試
測試:
vi /data/wwwroot/test.com/3.php 把下面內容寫進去:
<?php
phpinfo();
然後curl一下:curl -x127.0.0.1:80 test.com/3.php 這時他是解析不了的
然後重新加載一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
在解析:
curl -x127.0.0.1:80 test.com/3.php
Nginx代理
cd /usr/local/nginx/conf/vhost
vim proxy.conf //加入如下內容
server
{
listen 80;
server_name ask.apelearn.com;定義域名
location /
{
proxy_pass http://121.201.9.155/;遠程服務端web服務器的ip。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
驗證一下:curl ask.apelearn.com/robots.txt
本機也能訪問:curl -x127.0.0.1:80 ask.apelearn.com/robots.txt
Nginx負載均衡
vim /usr/local/nginx/conf/vhost/load.conf // 寫入如下內容
upstream qq_com 這個名字代表著下邊的兩個IP
{
ip_hash;
server 61.135.157.156:80;
server 125.39.240.113:80;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qq_com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream來指定多個web server
SSL工作原理
1.瀏覽器發送一個https的請求給服務器;
2.服務器要有一套數字證書,可以自己制作(後面的操作就是阿銘自己制作的證書),也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出>提示頁面,這套證書其實就是一對公鑰和私鑰;
3.服務器會把公鑰傳輸給客戶端;
4.客戶端(瀏覽器)收到公鑰後,會驗證其是否合法有效,無效會有警告提醒,有效則會生成一串隨機數,並用收到的公鑰加密;
5.客戶端把加密後的隨機字符串傳輸給服務器;
6.服務器收到加密隨機字符串後,先用私鑰解密(公鑰加密,私鑰解密),獲取到這一串隨機數後,再用這串隨機字符串加密傳輸的數據(該加密為對稱加密,所謂對稱加密,就是將數據和私鑰也就是這個隨機字符串>通過某種算法混合在一起,這樣除非知道私鑰,否則無法獲取數據內容);
7.服務器把加密後的數據傳輸給客戶端;
8.客戶端收到數據後,再用自己的私鑰也就是那個隨機字符串解密;
生成SSL密鑰對
先進入到這個目錄下:cd /usr/local/nginx/conf
生成一個私鑰:openssl genrsa -des3 -out tmp.key 2048//key文件為私鑰
openssl rsa -in tmp.key -out aminglinux.key //轉換key,取消密碼
刪掉沒用的這個:rm -f tmp.key
openssl req -new -key aminglinux.key -out aminglinux.csr//生成證書請求文件,需要拿這個文件和私鑰一起生產公鑰文件
生成公鑰文件:openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt
這裏的aminglinux.crt為公鑰
Nginx配置SSL
vim /usr/local/nginx/conf/vhost/ssl.conf//加入如下內容
server
{
listen 443;
server_name aming.com;
index index.html index.php;
root /data/wwwroot/aming.com;
ssl on;
ssl_certificate aminglinux.crt;
ssl_certificate_key aminglinux.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
創建一個路徑:mkdir /data/wwwroot/aming.com 因為跑配置文件有這個路徑
-t && -s reload //若報錯unknown directive “ssl” ,需要重新編譯nginx,加上--with-http_ssl_module
方法:
進到這個目錄下,cd /usr/local/src/nginx-1.12.1/
./configgure --help |grep -i ssl
添加一條正則表達式:
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
用命令查看:/usr/local/nginx/sbin/nginx -V 會多一個參數
檢查錯誤:/usr/local/nginx/sbin/nginx -t
重啟一下:/etc/init.d/nginx restart
查一下他的監聽端口:netstat -lntp 會發現多了一個443端口
創建一個測試文件:
把這句話寫入到配置文件去:
echo This is ssl.>/data/wwwroot/aming.com/index.html
要想直接訪問IP就編輯hosts:
vi /etc/hosts 增加127.0.0.1 aming.com
curl https://aming.com/
再從你的電腦hosts裏添加上你的虛擬機ip:192.168.65.135 aming
用電腦連網輸入:https//aming.com 如果不能上查看防火墻
iptables -nvL
iptables -F
php-fpm的pool
vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加
include = etc/php-fpm.d/*.conf
mkdir /usr/local/php/etc/php-fpm.d/
cd /usr/local/php/etc/php-fpm.d/
vim www.conf //內容如下
[www]
listen = /tmp/www.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
繼續編輯配置文件
vim aming.conf //內容如下
[aming]
listen = /tmp/aming.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
檢查:/usr/local/php/sbin/php-fpm –t
重啟:/etc/init.d/php-fpm restart
php-fpm慢執行日誌
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下內容
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
配置nginx的虛擬主機test.com.conf,把unix:/tmp/php-fcgi.sock改為unix:/tmp/www.sock
重新加載nginx服務
vim /data/wwwroot/test.com/sleep.php//寫入如下內容
<?php echo “test slow log”;sleep(2);echo “done”;?>
curl -x127.0.0.1:80 test.com/sleep.php
cat /usr/local/php-fpm/var/log/www-slow.log
php-fpm定義open_basedir
vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf//加入如下內容
php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/
創建測試php腳本,進行測試
再次更改aming.conf,修改路徑,再次測試
配置錯誤日誌
再次測試
查看錯誤日誌
php-fpm進程管理
pm = dynamic //動態進程管理,也可以是static,如果改成static下邊的就不會生效了
pm.max_children = 50 //最大子進程數,ps aux可以查看
pm.start_servers = 20 //啟動服務時會啟動的進程數
pm.min_spare_servers = 5 //定義在空閑時段,子進程數的最少數量,如果達到這個數值時,php-fpm服務會自動派生新的子進程。
pm.max_spare_servers = 35 //定義在空閑時段,子進程數的最大值,如果高於這個數值就開始清理空閑的子進程。
pm.max_requests = 500 //定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多可以處理這麽多請求,當達到這個數值時,它會自動退出。
本文出自 “12912638” 博客,請務必保留此出處http://12922638.blog.51cto.com/12912638/1956156
筆記11(LNMP)