linux覆盤:構架搭建lnmp(配置)

nginx虛擬主機

vim /usr/local/nginx/conf/nginx.confphp

增長include vhost/*.conf;css

mkdir /usr/local/nginx/conf/vhosthtml

vim /usr/local/nginx/conf/vhost/aaa.com.conf #虛擬主機配置文件linux

server
{
    listen 80 default_server;   (有default_serve就是默認虛擬主機)
    server_name aaa.com;     (定義網站名字)
    index index.html index.htm index.php;
    root /data/wwwroot/default;  (定義配置文件目錄,還沒建立)
}

若是給虛擬主機配置php解析就加入:nginx

server
{
    listen 80 default_server;   
    server_name aaa.com;    
    index index.html index.htm index.php;
    root /data/wwwroot/default; 
    location ~ \.php$
        {
            include fastcgi_params;
            fastcgi_pass unix:/tmp/php-fcgi.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
        }
}

nginx用戶認證

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的/usr/local/apache/bin/htpasswd命令,須要使用yum安裝httpd命令:web

htpasswd -c /usr/local/nginx/conf/htpasswd quyifan算法

nginx域名重定向

vim /usr/local/nginx/conf/vhost/test.com.conf
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' ) {
        rewrite  ^/(.*)$  http://test.com/$1  permanent;           (這裏指不是rest.com的所有跳轉)
    }
}

nginx訪問日誌

vim /usr/local/nginx/conf/vhost/test.com.conf

access_log /tmp/test.com.log quyifan

nginx日誌切割

vim /usr/local/sbin/nginx_log_rotate.sh  shell腳本保存在這裏
配置以下
#! /bin/bash
d=`date -d "-1 day" +%Y%m%d` 
#定義切割時間(切割一天前的日誌)
logdir="/tmp/"
#此處指定要切割的日誌路徑(該路徑來自虛擬主機配置文件)
nginx_pid="/usr/local/nginx/logs/nginx.pid"
#調用pid的目的是執行命令:/bin/kill -HUP `cat $nginx_pid`
#該命令等價於命令:nginx -s reload(從新加載文件),確保與虛擬主機配置文件變動保持同步
#該地址來自nginx配置文件
cd $logdir
for log in `ls *.log`
do
    mv $log $log-$d
done
#此處使用通配進行循環,對全部複合條件的日誌文件進行切割
/bin/kill -HUP `cat $nginx_pid`
#執行此命令進行重載生成新的日誌文件來記錄新的日誌

nginx靜態不記錄日誌和過時時間

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$   正則
    {
          expires      7d;  (上下寫一塊兒是由於設置的過時時間不一樣)
          access_log off;
    }
location ~ .*\.(js|css)$
    {
          expires      12h;
          access_log off;
    }

防盜鏈

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 ;
#這裏定義.test.com爲白名單
    if ($invalid_referer) {
        return 403;
#這裏表示若是不在白名單內直接回饋403
    }
    access_log off;
}

nginx訪問控制

#限制某些ip不能訪問,或者只容許一部分訪問
location /admin/
{
    allow 192.168.153.130;
    allow 127.0.0.1;
    deny all;
}

#若是隻拒絕幾個ip的訪問就是
location /admin/
{
    deny 192.168.188.1;
    deny 192.168.8.8;
}

#能夠匹配正則來限制
location ~ .*(abc|image)/.*\.php$
{
        deny all;
}

#根據user_agent限制,用的不少受到cc攻擊,要禁掉百度蜘蛛,想作被隱藏的網站
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
      return 403;
}
這裏~指匹配符號,只要有Spider/3.0或YoudaoBot或Tomato字符串的直接被拒絕,返回403

Nginx解析php

location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock; (此處錯誤出現502,找不到sock)
        #fastcgi_pass 127.0.0.1:9000
        #fastcgi_pass 兩種監聽格式,可是要保證Nginx和php-fpm中格式一致
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
        #這裏的地址和最上面的root保持一致
    }

Nginx代理

server
{
    listen 80;
    server_name ask.apelearn.com;
 
   location /
    {
        proxy_pass      http://121.201.9.155/;
        #這裏是告訴Nginx代理服務器,真正要被訪問的web服務器ip是多少
        proxy_set_header Host   $host;
        #Host指的是要訪問的域名servername,就是代理服務器真正訪問的域名ask.apelearn.com
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

nginx負載均衡

upstream qq
#這裏定義後端的web server,能夠是一個或多個
{
    ip_hash;
    #表示負載均衡算法,表示根據ip地址把請求分到不一樣服務器上(同一個用戶始終保持在同一個機器上)
    #例如訪問阿銘論壇,第一次在發帖子登陸,刷新後發現沒登陸,就是訪問到另外一個機器上了
    #用戶A與用戶Bip不一樣,A訪問時會把請求轉發到第一個web server上,B訪問會到第二個web server上
    #這種算法用在把session存到本機磁盤的狀況
    server 61.135.157.156:80;
    server 125.39.240.113:80;
    #這裏定義多個ip
}
server
{
    listen 80;
    server_name www.qq.com;
    location /
    {
        proxy_pass      http://qq;(這裏寫upstream的名字,表明它下面的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;
    }
}

nginx配置ssl

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;
}

php-fpm配置文件

php-fpm做爲獨立的一個服務存在,必然有本身的配置文件,/usr/local/php-fpm/etc/php-fpm.confshell

vim /usr/local/php-fpm/etc/php-fpm.conf
#加入第二行配置,這裏沒有把兩個pool分開
[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

vim /usr/local/php-fpm/etc/php-fpm.conf   //主配置文件中的[global]部分增長
include = etc/php-fpm.d/*.conf

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
#這裏把兩個pool分開和nginx.conf相似

vim /usr/local/nginx/conf/vhost/aaa.com.conf
location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/aming.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
    }

php-fpm慢執行日誌

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入以下內容

request_slowlog_timeout = 1  (能夠寫成兩秒不少腳本都超過一秒)
#定義超時時間,即php的腳本執行時間超過1秒就會記錄日誌
slowlog = /usr/local/php-fpm/var/log/www-slow.log
#定義慢執行日誌的路徑和名字,遇到php網站訪問卡頓,來查看這個慢執行日誌

open_basedir

安全限制apache

當一臺服務器跑多個站點時,使用openbasedir限定各個站點所能訪問的服務器上的目錄的範圍vim

vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf//加入以下內容
php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/

php-fpm進程管理

vim  /usr/local/php/etc/php-fpm.d/www.conf 配置文件內容
 pm = dynamic  
 #定義php子進程啓動模式,dynamic動態進程管理模式,指一開始啓動少許子進程,根據實際需求,動態的增長或減小子進程,最多不超過下面pm.max_children定義的數值
 #也能夠是static,這種模式下進程數由pm.max_children決定,一次性啓動這麼多,不會增長或減小
 pm.max_children = 50 
 #最大子進程數,ps aux能夠查看
 pm.start_servers = 20 
 #針對dynamic模式,定義啓動php-fpm服務時會啓動的進程數
 pm.min_spare_servers = 5 
 #針對dynamic模式,定義在空閒時段,子進程數的最少數量,若是達到這個數值時,php-fpm服務會自動派生新的子進程
 pm.max_spare_servers = 35 
 #針對dynamic模式,定義在空閒時段,子進程數的最大值,若是高於這個數值就開始清理空閒的子進程
 pm.max_requests = 500  
 #針對dynamic模式,定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多能夠處理這麼多請求,當達到這個數值時,它會自動退出
相關文章
相關標籤/搜索