Nginx詳解以及LNMP的搭建


一、nginx 介紹

Alt text

1.1 特性:

  模塊化設計,較好的擴展性 
  高可靠性 
  支持熱部署:不停機更新配置文件,升級版本,更換日志文件 
  低內存消耗:10000 個keep-alive 連接模式下的非活動連接,僅需要2.5M 內存 
  event-driven,aio,mmap,sendfile 
基本功能: 
  靜態資源的web 服務器 
  http 協議反向代理服務器,負載均衡 
  pop3/imap4 協議反向代理服務器 
  FastCGI(lnmp),uWSGI(python) 等協議 
  模塊化(非DSO ),如zip ,SSL模塊 
  web 服務相關的功能: 
  虛擬主機(server 
  支持 keep-alive 和管道連接 
  訪問日志(支持基於日志緩沖提高其性能) 
  url rewirte 
  路徑別名 
  基於IP 及用戶的訪問控制 
  支持速率限制並發數限制 
  重新配置和在線升級而無須中斷客戶的工作進程 
  Memcached 的GET 接口

1.2 nginx 架構

Alt text 
nginx 的程序架構:master/worker 結構 
  一個master 進程: 
    負載加載和分析配置文件、管理worker 進程、平滑升級 
  一個或多個worker 進程 
    處理並響應用戶請求 
緩存相關的進程: 
  cache loader :載入緩存對象 
  cache manager:管理緩存對象

1.3 nginx 高度模塊化

  但其模塊早期不支持DSO 機制;1.9.11版本支持動態裝載和卸載 
模塊分類: 
核心模塊:core module 
標准模塊: 
  • HTTP : 模塊: ngx_http_* 
    HTTP Core modules 默認功能 
    HTTP Optional modules 需編譯時指定 
  • Mail 模塊 ngx_mail_* 
  • Stream 塊 模塊 ngx_stream_* 
第三方模塊

1.4 nginx 的功用

  靜態的web 資源服務器 
    html,圖片,js ,css ,txt 等靜態資源 
  結合FastCGI/uWSGI/SCGI等協議反向代理動態資源請求: 
    http/https 協議的反向代理 
    imap4/pop3 協議的反向代理 
    tcp/udp 協議的請求轉發(反向代理)

二、nginx 目錄結構和命令

2.1 nginx 命令

ls /usr/local/nginx/  html 是測試頁,sbin 是主程序 
ls/usr/local/nginx/sbin/  nginx 只有一個程序文件 
ls/usr/local/nginx/html/  50x.html index.html 測試網頁

Nginx:默認為啟動nginx 
  -h 查看幫助選項 
  -V 查看版本和配置選項 
  -t 測試nginx語法錯誤 
  -c filename 指定配置文件(default:/etc/nginx/nginx.conf) 
  -s signal 發送信號給master 進程,signal 可為: 
    stop, quit,reopen, reload 示例:-s stop 停止nginx -s 
  reload 加載配置文件 
    注意:不要和systemctl 混合使用 
  -g directives 在命令行中指明全局指令

2.2 配置文件的組成部分:

主配置文件:nginx.conf 
子配置文件:include conf.d/*.conf 
  fastcgi,uwsgi ,scgi 等協議相關的配置文件 
  mime.types :支持的mime 類型 
主配置文件的配置指令: 
  directive value [value2 ...]; 
注意: 
(1) 指令必須以分號結尾 
(2) 支持使用配置變量 
  內建變量:由Nginx 模塊引入,可直接引用 
  自定義變量:由用戶使用set 命令定義 
    set variable_name value; 
  引用變量:$variable_name 
  

三、nginx 主配置文件的介紹和設置

3.1 Main 全局配置段常見的配置指令分類

3.1.1 介紹

  • 正常運行必備的配置
  • 優化性能相關的配置
  • 用於調試及定位問題相關的配置
  • 事件驅動相關的配置

3.1.2 一些設置

user nginx; //nginx運行時是以誰的身份開啟的子進程
worker_processes auto; //進程數,auto是自動和CPU核數相對應
worker_priority number; //指定worker
進程的nice 值,設定worker 進程優先級:[-19,19]
error_log / var/log/nginx/error.log info; //錯誤日志的路徑和級別
pid / var/run/nginx.pid; //指定存儲nginx 主進程PID 的文件路徑
include file //指明包含進來的其它配置文件片斷
events {
worker_connections 30000; //每個worker進程所能夠打開的最大並發連接數數量,默認是1024,一般都不夠,調大
use epoll; //指明並發連接請求的處理方法, 默認自動選擇最優方法
}
accept_mutex on/off; //前台|后台運行

3.2 http 協議段的相關配置

格式介紹

http { //可以放多個server段
... ...
server {
...
server_name
root
location [OPERATOR] /uri/ {
...
}
}
server {
...
}
}

3.3 與套接字相關的配置

1)server 配置虛擬主機

server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}

2)listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE 
listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] 
[rcvbuf=size] [sndbuf=size] 
  default_server 設定為默認虛擬主機 
  ssl 限制僅能夠通過ssl 連接提供服務 
  backlog=number 超過並發連接數后,新請求進入后援隊列的長度 
  rcvbuf=size 接收緩沖區大小 
  sndbuf=size 發送緩沖區大小 
注意: 
(1)基於port: 
  listen PORT; 指令監聽在不同的端口 
(2)基於ip 的虛擬主機: 
  listen IP:PORT; IP 地址不同 
(3)基於hostname: 
  server_name fqdn; 指令指向不同的主機名

3) server_name name ...; 
虛擬主機的主機名稱后可跟多個由空白字符分隔的字符串 
支持* 通配任意長度的任意字符 
  server_name .magedu.com www.magedu. 
支持~ 起始的字符做正則表達式模式匹配,性能原因慎用 
  server_name ~^www\d+.magedu.com$ 
  \d 表示 [0-9] 
匹配優先級機制從高到低: 
(1)首先是字符串精確匹配 如:www.magedu.com 
(2)左側 通配符 如:.magedu.com 
(3)右側 通配符 如:www.magedu. 
(4)正則表達式 如: ~^.*.magedu.com$ ,因為消耗cpu運算 
(5)default_server

4)tcp_nodelay on | off; 在長連接的情況下,是否延遲 
在keepalived 模式下的連接是否啟用TCP_NODELAY 選項 
  當為off 時,延遲發送,合並多個請求后再發送 
  默認On 時,不延遲發送 
  可用於:http, server, location

5)sendfile on | off; 
是否啟用sendfile功能,在內核中封裝報文直接發送,默認Off

6)server_tokens on | off | build | string 
是否在響應報文的Server 首部顯示nginx版本

3.4 定義路徑相關的配置

7)root 
  設置web 資源的路徑映射;用於指明請求的URL 所對應的文檔的主目錄路徑。

server {
...
root /data/www/vhost1;
}

示例:

http: //www.magedu.com/images/logo.jpg --> /data/www/vhosts/images/logo.jpg

  注意:root 不僅可以用在server段,還可用於http、server、location、if in locatin

8)location [ = | ~ | ~* | ^~ ] uri { ... } 主要控制URL路徑 
location @name { … } 
  在一個server 中location 配置段可存在多個,用於實現從uri到文件系統的路徑映射;ngnix 會根據用戶請求的URI 來檢查定義的所有location ,並找出一個最佳匹配,而后應用其配置 
示例: 
(1)

server {...
server_name www.magedu.com;
location /images/ {
root /data/imgs/;
}
}

http://www.magedu.com/images/logo.jpg –> /data/imgs/images/logo.jpg

(2) = :對URI 做精確匹配;

location = / {
...
}

http://www.magedu.com/ 匹配

http://www.magedu.com/index.html 不匹配

(3) 正則符號的作用 
^~ :對URI 的最左邊部分做匹配檢查,不區分字符大 小寫 
~ :對URI 做正則表達式模式匹配,區分字符大小寫 
~* :對URI 做正則表達式模式匹配,不區分字符大小寫 
不帶符號:匹配起始於此uri 的所有的uri

(4) 匹配優先級從高到低: 
=, ^~, ~/ ~*, 不帶符號

9)alias path; 
路徑別名,文檔映射的另一種機制;僅能用於location 上下文 
示例:

http://www.magedu.com/bbs/index.php
location /bbs / {
alias /web /forum/;
} --> /web/forum/index.html
location /bbs / {
root /web /forum/;
} --> /web/forum/bbs/index.html

注意:location 中使用root 指令和alias 指令的意義不同 
(a) root ,給定的路徑對應於location 中的/uri/左 側的/ 
(b) alias ,給定的路徑對應於location 中的/uri/右 側的/,完全置換

(10)index file ... ; 
  指定默認網頁資源,注意:ngx_http_index_module 模塊

例:

index index.php index.html

(11)error_page code ... [=[response]] uri; 錯誤頁面 
  基於ngx_http_core_module模塊。 
  定義錯誤頁, 以指定的響應狀態碼進行響應 
  可用位置:http, server,location, if in location

error_page 404 /404.html
error_page 404 =200 /404.html //錯誤狀態碼改為200,還是原來的錯誤頁面

(12)try_files file ... uri ; 
   try_files file ... =code ; 
  按順序檢查文件是否存在,返回第一個找到的文件或文件夾(結尾加斜線表示為文件夾),如果所有的文件或文件夾都找不到,會進行一個內部重定向到最后一個參數。只有最后一個參數可以引起一個內部重定向,之前的參數只設置內部URI 的指向。最后一個參數是回退URI 且必須存在,否則會出現內部500 錯誤

location /images/ {
try_files $uri
/images/default.gif;
}
location / {
try_files $uri $uri/index.html $uri.html =404;
}

3.5 定義客戶端請求的相關配置

(13)keepalive_timeout timeout [header_timeout]; 
  設定保持長連接超時時長,0 表示禁止長連接,默認為75s

(14)keepalive_requests number; 
  在一次長連接上所允許請求的資源的最大數量,默認為100

(15)keepalive_disable none | browser … 
  略,沒有那么老版本的瀏覽器對哪種瀏覽器禁用長連接

(16)send_timeout time; 
  向客戶端發送響應報文的超時時長,此處是指兩次寫操作之間的間隔時長,而非整個響應過程的傳輸時長

(17)client_body_buffer_size size; 緩存,hash值,取32位的后1位,2位,2位做幾級目錄 
  用於接收每個客戶端請求報文、上傳的body 部分的緩沖區大小;默認為16k ;超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置

(18)client_body_temp_path path 
[level1 [level2 [level3]]]; 
  設定用於存儲客戶端請求報文的body 部分的臨時存儲路徑及子目錄結構和數量 
  目錄名為16 進制的數字;

client_body_temp_path /var/tmp/client_body 1 2 2

1級目錄占1 位16進制,即2^4=16個目錄 0-f 
2級目錄占2 位16進制,即2^8=256個目錄 00-ff 
3級目錄占2 位16進制,即2^8=256個目錄 00-ff

3.6 對客戶端進行限制的相關配置

(19)limit_rate rate; 限速 
  限制響應給客戶端的傳輸速率,單位是bytes/second,默認值0表示不限速

(20)limit_except method … { … } ,僅用於location,限制客戶端使用除了指定的請求方法之外的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {
allow 192.168.1.0/24;
deny all;
}

  上述代碼的意思是:除了GET 和HEAD 之外的其它方法,僅允許192.168.1.0/24網段主機

3.7文件操作優化的配置

(21)aio on | off | threads[=pool]; 是否啟用aio 異步io功能,異步寫磁盤

(22)directio size | off; 是否同步(直接)寫磁盤,而非寫緩存,在Linux 主機啟用O_DIRECT標記, 則文件大於等於給定大小時使用,例如directio 4m

(23)open_file_cache off;

open_file_cache max=N [inactive=time];

nginx 可以緩存以下三種信息:(緩存詳細介紹見我的下一篇博客 
Nginx實現負載均衡&Nginx緩存功能) 
① 文件元數據:文件的描述符、文件大小和最近一次的修改時間 
 打開的目錄結構 
 沒有找到的或者沒有權限訪問的文件的相關信息 
max=N:可緩存的緩存項上限;達到上限后會使用LRU (最近最少使用)算法實現管理 
inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少於open_file_cache_min_uses 指令所指定的次數的緩存項,即為非活動項,將被刪除

(24)open_file_cache_errors on | off; 
  是否緩存查找時發生錯誤的文件一類的信息 ,默認值為off

(25)open_file_cache_min_uses number; 
  open_file_cache 指令的inactive 參數指定的時長內,至少被命中此處指定的次數方可被歸類為活動項,默認值為1

(26)open_file_cache_valid time; 
  緩存項有效性的檢查頻率,默認值為 為60s

四、nginx重要配置

4.1 權限控制

  實現權限控制的是ngx_http_access_module模塊,他是用來實現基於ip的訪問控制功能: 
設置語法如下:

allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all;

  這個設置在httpserverlocationlimit_except段都可以使用。 
  在讀取的時候,是自上而下的檢查,一旦匹配,就會生效,所以,我們在設置的時候,需要把條件嚴格的置前。 
示例:

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}


4.2 身份驗證

  nginx中實現身份驗證的模塊是ngx_http_auth_basic_module,這個模塊是用來實現基於用戶的訪問控制,使用basic機制進行用戶認證。 
  我們使用以下命令來控制該驗證是否開啟:

auth_basic string | off;
auth_basic_user_file file;

  具體的設置語法如下:

location /admin/ {
auth_basic "Admin Area"; //引號中為提示字符
auth_basic_user_file /etc/nginx/.ngxpasswd; //保存用戶口令的文件
}

  下面我們來看看用戶口令文件: 
1)明文文本 
  格式為:

name:password:comment

2)加密文本 
  由htpasswd命令實現。該命令由httpd-tools包提供。具體實現如下圖:

  我們來具體說一下選項的作用:

-c  創建新用戶 
-m  使用基於md5的加密


4.3 狀態信息頁面

  該頁面是基於ngx_http_stub_status_module模塊實現的。用於輸出nginx的基本狀態信息。

 
  我們可以用瀏覽器來查看一下這個狀態頁面:


  其中的“1 1 1”,這三個數字分別對應accepts,handled,requests 三個值。 
  上圖中每一段的含義如下: 
Active connections: 當前狀態,活動狀態的連接數 
accepts :統計總值,已經接受的客戶端請求的總數 
handled :統計總值,已經處理完成的客戶端請求的總數 
requests :統計總值,客戶端發來的總的請求數 
Reading :當前狀態,正在讀取客戶端請求報文首部的連接的連接數 
Writing :當前狀態,正在向客戶端發送響應報文過程中的連接數 
Waiting :當前狀態,正在等待客戶端發出請求的空閑連接數


4.4 日志的設置

  基於ngx_http_log_module模塊,該模塊可以指定日志格式記錄的請求:

log_format name string …;

  用來定義日志的格式,其中,string可以使用nginx核心模塊及其他模塊內嵌的變量。

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

  用來調用日志。定義了訪問日志文件的路徑,格式及相關的緩沖的配置。其中: 
  buffer=size 緩存大小 
  flush=time 多長時間清除緩存 
  示例如下:

log_format compression '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
 
access_log /var/log/nginx/access.log compression buffer=32k;

(略)  open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; 
    open_log_file_cache off;

  緩存個日志文件相關的元數據信息,其中: 
max :緩存的最大文件描述符數量; 
min_uses :在inactive指定的市場內訪問大於等於此值,方可被當做活動項; 
inactive :非活動時長; 
valid :驗證緩存中各個緩存項是否為活動項的時間間隔。


4.5 壓縮

  基於ngx_http_gzip_module模塊。使用gzip方法壓縮相應數據,節約帶寬,默認設置沒有開啟。

gzip on | off ;

  啟用或禁用gzip壓縮

gzip_comp_level level ;

  壓縮比由低到高:1-9。默認為1

gzip_disable regex … ;

  匹配到客戶端瀏覽器不執行壓縮

gzip_min_length length ;

  啟用壓縮功能的響應報文大小

gzip_http_version 1.0 | 1.1 ;

  設定啟用壓縮功能時,協議的最小版本。默認為:1.1版本

gzip_buffers number size ;

  支持實現壓縮功能時緩沖區數量每個緩存區的大小。默認為324k或168k。

gzip_types mime-type … ;

  指明僅對哪些類型的資源執行壓縮操作;即壓縮過濾器 
  默認包含有text/html,不用顯示指定,否則會出錯 
  查看nginx的mime類型:cat /etc/nginx/mime.types

gzip_vary on | off ;

  如果啟用壓縮,是否在響應報文首部插入“Vary: Accept-Encoding”

gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any … ;

  nginx:對於代理服務器請求的響應報文,在何種條件下啟用壓縮功能 
  off :對被代理的請求不啟用壓縮 
  expired,no-cache, no-store ,private :對代理服務器請求的響應報文首部Cache-Control 值任何一個,啟用壓縮功能 
示例:

gzip on;
gzip_comp_level 9;
gzip_min_length 128;
gzip_types text/css application/javascript text/plain;
gzip_vary on;


  我們來測試一下壓縮效果:


4.6 ssl 加密的實現

1)server中的選項:

ssl on | off ;

  為指定虛擬機啟用HTTPS protocol,建議用listen 指令代替

ssl_certificate file ;

  當前虛擬主機使用PEM 格式的證書文件路徑

ssl_certificate_key file ;

  當前虛擬主機上與其證書匹配的私鑰文件路徑

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] ;

  支持ssl 協議版本,默認為后三個

ssl_session_cache off | none | [builtin[:size]] [shared:name:size] ;

  builtin[:size] :使用OpenSSL 內建緩存,為每worker 進程私有

  [shared:name:size] :在各worker 之間使用一個共享的緩存

ssl_session_timeout time;

  客戶端連接可以復用ssl session cache 中緩存的ssl 參數的有效時長,默認5m 
示例:

server{
listen 443 ssl;
server_name www.keer.com;
root /data/web;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
}

 
  下面的實驗會講到在nginx中實現ssl加密的具體步驟,有興趣的走傳送器


4.7 地址重寫

  基於ngx_http_rewrite_module模塊。

The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects, and conditionally select configurations.

  將用戶請求的URI 基於PCRE regex 所描述的模式進行檢查,而后完成重定向替換

示例:

http://www.magedu.com/hn --> http://www.magedu.com/henan
http://www.magedu.com --> https://www.magedu.com/

4.7.1 rewrite 用法

  將用戶請求的URI基於regex所描述的模式進行檢查,匹配到時將其替換為replacement指定的新的URI。 
  其語法是:

  rewrite regex replacement [flag]

  注意:如果在同一級配置塊中存在多個rewrite規則,那么會自下而下逐個檢查;被某條件規則替換完成后,會重新一輪的替換檢查。 
  隱含有循環機制,但不超過10次;如果超過,提示500響應碼, [flag]所表示的標志位用於控制此循環機制。 
  如果replacement是以http://或https://開頭,則替換結果會直接以重向返回給客戶端。 
  下面我們來說一說flag的具體選項: 
[flag]

last:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,而后對新的URI啟動新一輪(從第一個開始)重寫檢查;提前重啟新一輪循環。 
break:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,而后直接跳轉至重寫規則配置塊之后的其它配置;結束循環,建議在location中使用。 
redirect臨時重定向,重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求;不能以http://或https://開頭,使用相對路徑,狀態碼: 302。 
permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求,狀態碼:301。

  由下圖我們可以更清楚的看出跳轉到的位置:

4.7.2 return用法

  return的用法語法如下:

   return code [text];
   return code URL;
   return URL;

  停止處理,並返回給客戶端指定的響應碼。 
例:連續跳轉,image永久重定向到img,img又跳到www.baidu.com

location /image {
rewrite ^/image/(.*)$ /img/$1 permanent;
}
location /img {
return http://www.baidu.com/ ;
}

4.7.3 一些其他的用法

rewrite_log on | off ;

  把跳轉的信息寫到日志中 
  是否開啟重寫日志, 發送至error_log (notice level)

set $variable value ;

  用戶自定義變量,注意:變量定義和調用都要以$ 開頭

if (condition) { … }

  引入新的上下文, 條件滿足時,執行配置塊中的配置指令;server, location。其中: 
condition可以為以下內容: 
比較操作符: 
  == 相同 
  != 不同 
  ~ :模式匹配,區分字符大小寫 
  ~* :模式匹配,不區分字符大小寫 
  !~ :模式不匹配,區分字符大小寫 
  !~* :模式不匹配,不區分字符大小寫 
文件及目錄存在性判斷: 
  -e, !-e 存在(包括文件,目錄,軟鏈接) 
  -f, !-f 文件 
  -d, !-d 目錄 
  -x, !-x 執行 
舉例:

實驗一:搭建lnmp及類小米等商業網站的實現

環境:關閉防火牆,selinux

1、安裝包,開啟服務

yum -y install nginx mariadb-server php-fpm php-mysql
systemctl start nginx
systemctl start mariadb
systemctl start php-fpm

2、修改nginx的配置文件

cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf

  我們將模板例子復制一份,去覆蓋我們的配置文件,接着,對配置文件進行修改:

vim /etc/nginx/nginx .conf

  修改下面幾類: 
1)user nobody;  使用用戶 
error_log /var/log/nginx/error.log info;  錯誤日志 
2)

events {
worker_connections 65535;
}

3)

tcp_nopush on; //tcp優化
tcp_nodelay on;
gzip on;

4)

server {
listen 80;
server_name xiaomi.keer.com; //根據自己需求隨便寫
root /data/web; //主站點的目錄根
location / {
index index.php index.html index.htm;
}

5)

location ~ \.php $ { //開啟.php,配置文件有例子,只需去掉注釋,修改一行即可
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

  以上五段全部修改完成后,可以使用nginx -t檢查有沒有語法錯誤,如果沒有錯誤,就可以開啟服務了:

systemctl restart nginx

  我們重啟服務,發現有warn(警告),這是因為我們的文件描述符最大值超出了系統的設置:

ulimit -n

  我們可以使用上述的命令來查看linux系統里打開文件描述符的最大值,一般缺省值是1024,對一台繁忙的服務器來說,這個值偏小,所以有必要重新設置linux系統里打開文件描述符的最大值

ulimit -n 65535  //修改內核參數

  現在我們就可以再次重啟服務了,就不會有問題了。

3、修改php-fpm的配置文件

vim /etc/php .ini  //改兩行
 
date .timezone = Asia/Shanghai  //時區
short_open_tag = On   //允許短標簽
vim /etc/php-fpm.d/www.conf 改兩行
 
user = nobody
group = nobody

  然后我們就可以重啟服務了:

systemctl restart php-fpm

4、運行mysql ,創建一會網頁需要的庫

create database xiaomi;

5、把事先找好的小米網站傳進來 rz

mkdir / data/web -p 創建一個目錄專門放小米的網頁配置
unzip -d / data/web/ xiaomi.zip 解壓到目錄
cd / data/web/
chown - R nobody.nobody *  //為了安全,遞歸把所有文件的所屬人和所屬組改為權限有限的nobody

6、網頁登錄

1)用戶:admin 
密碼:123456

2)參數設置:就是連接上自己的數據庫


  也可以在命令行連上自己的數據庫:

vim / data/web/data/config.php

3)把數據寫到數據庫中,恢復數據

7、實驗成功,登錄查看


  后台登錄,可以自己隨便修改:http://192.168.30.107/admin

8、ab 可以壓力測試

實驗二:實現ssl 加密

1、 修改總配置文件

  在/etc/nginx/nginx.conf中加一行:

include /etc/nginx/conf.d/*.conf; //添加的一行
server {
listen 80;
server_name xiaomi.com;
root /data/web;
#charset koi8-r;
 
#access_log logs/host.access.log main;
 
location / {
index index.php index.html index.htm;
}

2、修改子配置文件

vim /etc/nginx/conf.d/ssl.conf
server{
listen 443 ssl;
server name www.keer.com;
root /data/web;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.crt;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
 
location / {
index index.php index.html index.htm;
}
 
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

3、創建自簽名證書

cd /etc/pki/tls/certs/
make nginx.crt

  由於我們之前設定了秘鑰加密,這樣接下來比較不方便。所以,我們把私鑰解密:

openssl rsa - in nginx.key -out nginx.key

4、創建存放證書的文件夾,並把證書和秘鑰移進去

[root @rs01 certs]# mkdir /etc/nginx/ssl
[root @rs01 certs]# cp nginx.* /etc/nginx/ssl

5、檢查nginx配置文件語法錯誤

nginx -t

6、重啟nginx服務。

systemctl restart nginx

7、測試訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM