nginx入門到實(shí)戰(zhàn)

1.yum -y install gcc gcc-c++ autoconf pcre pcre-devel make
automake 安裝擴(kuò)展

  1. yum -y install wget httpd-tools vim 安裝工具
    初始化目錄
    cd /opt; mkdir app download logs work backup
  2. ping www.baidu.com 看是否能ping通
    4.關(guān)閉防火墻(我沒關(guān) 不知道會(huì)不會(huì)出啥幺蛾子 回頭再看)
    5.getenforce 查看selinux是否開啟(如開啟 執(zhí)行6 沒開啟執(zhí)行7)
    6.setenforce 0 關(guān)閉selinux

常見的HTTP服務(wù)
HTTPD - Apache 基金會(huì)
IIS - 微軟
GWS - Google

                    為什么選擇nginx
              
              原因一 、slinux IO 多路復(fù)用epoll

一介评、什么是IO多路復(fù)用
多個(gè)描述符的I/O操作都能在一個(gè)線程內(nèi)并發(fā)交替地順序完成彼念,這就叫I/O多路復(fù)用舆驶,這里的“復(fù)用”指的是復(fù)用同一個(gè)線程

二冤荆、什么是epoll
IO多路復(fù)用的實(shí)現(xiàn)方式 select、poll他托、epoll

    select會(huì)不停遍歷礼仗,等待被喚醒,線形遍歷
     缺點(diǎn): 
          1)能夠監(jiān)視文件描述符的數(shù)量存在最大限制
          2)線形掃描效率低下
     
      epoll模型
           1)每當(dāng)FD就緒会宪,采用系統(tǒng)的回調(diào)函數(shù)之間將fd放入肖卧,效率更高
            2)最大連接無限制

                            原因二、輕量級(jí)

      功能模塊少掸鹅,代碼模塊少

                          原因三塞帐、CPU親和

一拦赠、掃描是CPU親和

 是一種把CPU核心和Nginx工作進(jìn)程綁定方式,把每個(gè)worker進(jìn)程固定在一個(gè)cpu上葵姥,減少切換cpu的cache miss荷鼠,獲得更好的性能

                        原因四、sendfile

一臺(tái)服務(wù)器需要從內(nèi)核傳輸?shù)接脩?需要多次切換榔幸,nginx2.2+(零拷貝模式)傳輸靜態(tài)文件只到內(nèi)核 傳遞給socket然后到用戶

                   基于Nginx的中間件架構(gòu)

一允乐、 Nginx快速搭建與基本參數(shù)使用

   Mainline version 開發(fā)板
   Stable version 穩(wěn)定版
   Legacy version 歷史版本

安裝:
http://nginx.org/en/download.html 官網(wǎng)
Linux packages for stable version 點(diǎn)擊
[nginx] 找到這行復(fù)制
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/(baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

vim /etc/yum.repos.d/nginx.repo 編輯這個(gè)文件 黏貼進(jìn)去
yum -y install nginx 安裝
nginx -v 查看版本
nginx -V 查看編譯的參數(shù)

二、基本參數(shù)使用

 1削咆、安裝目錄講解
          命令:   rpm -ql nginx 
 路徑                                                            類型                                              作用

/etc/logrotate.d/nginx 配置文件 Nginx日志輪轉(zhuǎn)牍疏,用于 logrotate服務(wù)的日志切割
/etc/nginx 目錄、配置文件 Nginx主配置文件
/etc/nginx/nginx.conf
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/etc/nginx/fastcgi_params 配置文件 cgi配置相關(guān)态辛,fastcgi配置
/etc/nginx/uwsgi_params
/etc/nginx/scgi_params
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/etc/nginx/koi-utf 配置文件 編碼轉(zhuǎn)化映射轉(zhuǎn)換文件
/etc/nginx/koi-win
/etc/nginx/win-utf
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/etc/nginx/mime.types 配置文件 設(shè)置http協(xié)議的Content-Type與擴(kuò)展名的對(duì)應(yīng)關(guān)系
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/lib/systemd/system/nginx-debug.service 配置文件 用于配置出系統(tǒng)守護(hù)進(jìn)程管理器管理方式
/usr/lib/systemd/system/nginx/service
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/lib64/nginx/modules 目錄 Nginx模塊目錄
/etc/nginx/modules
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/sbin/nginx 命令 Nginx服務(wù)的啟動(dòng)管理的終端命令
/usr/sbin/nginx-debug
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/share/doc/nginx-1.12.0 文件麸澜、目錄 Nginx的手冊(cè)和幫助文件
/usr/share/doc/nginx-1.12.0/COPYRIGHT
/usr/share/man/man8/nginx/8.gz
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/var/cache/nginx 目錄 Nginx的緩存目錄
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/var/log/nginx 目錄 Nginx的日志目錄

2、安裝編譯參數(shù)
命令: nginx -V
編譯選項(xiàng) 作用
--prefix=/etc/nginx 安裝目的目錄或路徑
--sbin-path=/usr/sbin/nginx
--modules-path=/usr/lib64/nginx/modules
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx/pid
--lock-path=/var/run/nginx.lock
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--httpd-client-body-temp-path=/var/cache/nginx/client_temp 執(zhí)行對(duì)應(yīng)模塊時(shí)奏黑,Nginx所保留的臨時(shí)性文件
--httpd-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/chache/nginx/scgi_temp
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--user=nginx 設(shè)定Nginx進(jìn)程啟動(dòng)的用戶和組用戶
--group=nginx
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--with-cc-opt=parameters 設(shè)置額外的參數(shù)將被添加到CFLAGS變量
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--with-ld-opt=parameters 設(shè)置附加的參數(shù)炊邦,連接系統(tǒng)庫(kù)
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
3.Nginx默認(rèn)配置語法

user 設(shè)置nginx服務(wù)的系統(tǒng)使用用戶
worker_processes 工作進(jìn)程數(shù)(保持和cpu核數(shù)一樣)
error_log nginx的錯(cuò)誤日志
pid nginx服務(wù)啟動(dòng)時(shí)候pid

events
|- worker_connections 每個(gè)進(jìn)程允許最大連接數(shù)(65535最大 10000以上足夠正常企業(yè)使用)
|- use 工作進(jìn)程數(shù)

http{
server{
listen 80; 端口
server_name localhost; 域名

    location /                                         子目錄和當(dāng)前目錄
    {
                root   /usr/share/nginx/html;         指定目錄
                index   index.html     index.htm     默認(rèn)訪問頁(yè)面(如果index.html沒有找到  那么會(huì)去找index.htm)
    }
    error_page    500 502 503 504 /50.html
    location = /50x.html{
      root /usr/share/nginx/html;
  }

}
server{
... ...
}
}

curl -v http://www.imooc.com > /dev/null 查看網(wǎng)頁(yè)請(qǐng)求和相應(yīng)信息

  2、Nginx日志類型

包括error.log access_log

error.log 主要記錄 nginx處理http請(qǐng)求的錯(cuò)誤的狀態(tài)熟史,以及nginx本身服務(wù)的錯(cuò)誤狀態(tài)馁害,按照不同的級(jí)別記錄

error_log /var/log/nginx/error.log warn;
warn 記錄錯(cuò)誤日志的級(jí)別 可根據(jù)個(gè)人需要進(jìn)行調(diào)節(jié)

access_log 記錄nginx每一次http請(qǐng)求的訪問狀態(tài)(用于分析每一次訪問的請(qǐng)求和客戶的進(jìn)行交互和行為的分析)

規(guī)定了log_format 的格式 命名為main
log_format main '$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  main;  按照main格式進(jìn)行寫入

main 上下兩個(gè)名字要對(duì)應(yīng)

nginx.conf 中記錄有 上述兩個(gè)配置文件的位置

  3、Nginx變量

HTTP請(qǐng)求變量 -arg_PARMETER蹂匹、http_HEADER(request請(qǐng)求里面的head)碘菜、sent_http_HEADER(服務(wù)端返回給客戶端的head)

vim nginx.conf
log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

增加'$http_user_agent' (用戶的agent信息) 請(qǐng)求信息到access_log

nginx -t -c /etc/nginx/nginx.conf 檢查配置文件是否正確 -c 指定檢查路徑 (出現(xiàn)successful 表示成功)

nginx -s reload -c /etc/nginx/nginx.conf 重啟nginx 并指定配置文件路徑

curl http://127.0.0.1 請(qǐng)求幾次本機(jī)做實(shí)驗(yàn)

tail -n 200 /var/log/nginx/access.log 查看access.log日志

log_format 參數(shù)講解

log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

$remote_addr 客戶端地址
$remote_user http客戶端/用戶端請(qǐng)求nginx認(rèn)證的用戶名(默認(rèn)沒有開啟認(rèn)證模塊不會(huì)記錄)
$time_local nginx的時(shí)間
$request request頭的請(qǐng)求行
$status response返回的狀態(tài)碼
$body_bytes_sent 從服務(wù)端響應(yīng)給客戶端body的大小
$http_referer 上一個(gè)頁(yè)面的地址(防盜鏈一類的會(huì)在這做)
$http_user_agent 客戶端用什么訪問的
$http_x_forwarded_for 記錄每一級(jí)用戶通過http請(qǐng)求里面所對(duì)應(yīng)攜帶的http頭信息

      四、Nginx模塊講解

Nginx官方模塊
第三方模塊

2.安裝編譯參數(shù)詳解

編譯選項(xiàng) 作用
--with-http_stub_status_module Nginx客戶端的狀態(tài)

http_stub_status_module配置

  Syntax:stub_status;
  Default : --
  Context:server,location

vim defaulte.conf
加入
location /mystatus{
stub_status;
}

nginx -tc /etc/nginx/nginx.conf 檢查配置是否有錯(cuò)

nginx -s reload -c /etc/nginx/nginx.conf 重啟nginx

訪問地址:http://47.93.0.92/mystatus

展示信息
Active connections: 5 nginx當(dāng)前活躍的連接數(shù)
server accepts handled requests
128 128 140 nginx處理的握手的總次數(shù) 限寞、處理的連接數(shù) 忍啸、總請(qǐng)求數(shù)
Reading: 0 Writing: 1 Waiting: 4 讀,寫履植,等待

      四计雌、默認(rèn)模塊講解

編譯選項(xiàng) 作用
--with-http_random_index_module 目錄中選擇一個(gè)隨機(jī)主頁(yè)

2、random_index_module
Syntax: random_index on | off;
Default: random_index off;
Context:location

image.png
image.png

配置后 會(huì)隨機(jī)訪問主頁(yè)面 不會(huì)選擇隱藏文件

編譯選項(xiàng) 作用
--with-http_sub_module HTTP內(nèi)容替換

2玫霎、http_sub_module 語法有多個(gè) 列出常用的

替換指定字符串
Syntax: sub_filter string replacement; 模塊凿滤、內(nèi)容、替換后的內(nèi)容
Default: --
Context:http,server,location 加在http下可對(duì)多個(gè)server生效

在客戶端向服務(wù)端請(qǐng)求時(shí)庶近,用來判斷內(nèi)容是否有更新
Syntax: sub_filter_last_modified on | off;
Default: sub_filter_last_modified off;
Context: http,server,location

匹配所有html中第一個(gè) 還是全部 on第一個(gè) off全部
Syntax: sub_filter_once on | off;
Default: sub_filter_once on;
Context: http,server,location

例: 替換字符串

image.png
image.png
image.png
image.png

上圖為關(guān)閉只匹配一個(gè)的選項(xiàng)

八翁脆、Nginx的請(qǐng)求限制

連接頻率限制 - limit_conn_module
請(qǐng)求頻率限制 - limit_req_module

image.png
image.png

HTTP請(qǐng)求建立在一次TCP連接基礎(chǔ)上
一次TCP請(qǐng)求至少產(chǎn)生一次HTTP請(qǐng)求

連接限制配置語法

Syntax: limit_conn_zone key zone=name:size;
Default: --
Context:http

Syntax: limit_conn zone number;
Default: --
Context:http,server,location

請(qǐng)求限制配置語法

Syntax: limit_req_zone key zone=name:size rate=rate;
Default: --
Context:http

Syntax: limit_req zone=name [burst=number] [nodelay];
Default: --
Context:http,server,location

連接限制 : 固定寫法 客戶ip 規(guī)定空間1m
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
請(qǐng)求限制:固定寫法 客戶ip 規(guī)定空間1m 1秒請(qǐng)求一次
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;

配置實(shí)驗(yàn):

實(shí)驗(yàn)1: 一秒只接受一個(gè)ip一次請(qǐng)求
#limit_conn conn_zone 1;
規(guī)定 超過指定的數(shù)率后 3個(gè)放到后一秒執(zhí)行 其他的不執(zhí)行
#limit_req zone=req_zone burst=3 nodelay;
#limit_req zone=req_zone burst=3;
limit_req zone=req_zone;

image.png

有19個(gè)非200請(qǐng)求

實(shí)驗(yàn)2:一秒接受1個(gè)ip一次請(qǐng)求 把超出的3個(gè)請(qǐng)求放在下一秒執(zhí)行 其他超出部分直接返回 不執(zhí)行

    #limit_conn conn_zone 1;
    規(guī)定 超過指定的數(shù)率后 3個(gè)放到后一秒執(zhí)行 其他的不執(zhí)行
    limit_req zone=req_zone burst=3 nodelay;
    #limit_req zone=req_zone burst=3;
    #limit_req zone=req_zone;

    
   ![image.png](http://upload-images.jianshu.io/upload_images/5980687-1eb7195f0bcb7659.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
有16個(gè)非200請(qǐng)求

服務(wù)端同一時(shí)刻只允許一個(gè)ip連接
     limit_conn conn_zone 1;
    規(guī)定 超過指定的數(shù)率后 3個(gè)放到后一秒執(zhí)行 其他的不執(zhí)行
    #limit_req zone=req_zone burst=3 nodelay;
    #limit_req zone=req_zone burst=3;
    #limit_req zone=req_zone;


        九 、 Nginx的訪問控制

 基于Ip的訪問控制 http_access_module
 基于用戶的信任登錄  http_auth_basic_module


    1. http_access_module
    
     允許   ip          網(wǎng)段      soket   所有
Syntax: allow address | CIDR | unix: | all;
Default: --
Context: http鼻种,server反番,location,limit_except
              禁止   ip          網(wǎng)段      soket   所有
Syntax: deny  address | CIDR | unix: | all;
Default: --
Context: http,server恬口,location校读,limit_except

實(shí)驗(yàn): 限制自己ip不能訪問 其他ip允許訪問

location ~ ^/admin.html {
    root /opt/app/code;
    deny 106.121.75.209;
    allow all;  
    index index.html index.htm;
}

實(shí)驗(yàn):限制只能某網(wǎng)段 其他ip不允許 多用于后臺(tái)
location ~ ^/admin.html {
root /opt/app/code;
allow 106.121.75.0/24;
deny all;
index index.html index.htm;
}

    2. http_access_module 局限性
image.png

通過代理訪問后 會(huì)識(shí)別成代理ip 而非自己本身ip

    3、 http_x_forwarded_for
image.png

http_x_forwarded_for = Client IP , Proxy(1) IP , Proxy(2) IP

    4祖能、http_access_module局限性

方法一、 采用別的HTTP頭信息控制訪問蛾洛,如:HTTP_X_FORWARD_FOR
方法二养铸、 結(jié)合geo模塊作
方法三、 通過HTTP自定義變量傳遞

      1轧膘、  http_auth_basic_module 用戶登錄認(rèn)證
                              字符串

Syntax: auth_basic string | off;
Default: auth_basic off;
Context:http钞螟,server,location谎碍,limit_except
認(rèn)證存儲(chǔ)用戶名密碼的文件路徑
Syntax: auth_basic_user_file file;
Default : --
Context: http鳞滨,server,location蟆淀,limit_except

htpasswd -c ./auth_conf jeson 生成一個(gè)保存密碼的文件

例子:
location ~ ^/admin.html {
root /opt/app/code;
auth_basic "Auth access test!input your password!";
auth_basic_user_file /etc/nginx/auth_conf;
index index.html index.htm;
}

        2拯啦、 http_auth_basic_module 局限性

一、 用戶信息依賴文件方式
二熔任、 操作管理機(jī)械褒链,效率低下

3、解決方案

   一疑苔、Nginx結(jié)合LUA實(shí)現(xiàn)高效驗(yàn)證
   二甫匹、Nginx和LDAP打通,利用nginx-auth-ldap模塊


               基于Nginx的中間件架構(gòu)

進(jìn)階學(xué)習(xí) - 常見Nginx中間架構(gòu)

一惦费、靜態(tài)資源web服務(wù)
二兵迅、代理服務(wù)
三、負(fù)載均衡調(diào)度器SLB
四薪贫、動(dòng)態(tài)緩存
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恍箭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子后雷,更是在濱河造成了極大的恐慌季惯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臀突,死亡現(xiàn)場(chǎng)離奇詭異勉抓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)候学,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門藕筋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梳码,你說我怎么就攤上這事隐圾∥橄疲” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵暇藏,是天一觀的道長(zhǎng)蜜笤。 經(jīng)常有香客問我,道長(zhǎng)盐碱,這世上最難降的妖魔是什么把兔? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮瓮顽,結(jié)果婚禮上县好,老公的妹妹穿的比我還像新娘。我一直安慰自己暖混,他們只是感情好缕贡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拣播,像睡著了一般晾咪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诫尽,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天禀酱,我揣著相機(jī)與錄音,去河邊找鬼牧嫉。 笑死剂跟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酣藻。 我是一名探鬼主播曹洽,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼辽剧!你這毒婦竟也來了送淆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤怕轿,失蹤者是張志新(化名)和其女友劉穎偷崩,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞羽,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阐斜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诀紊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谒出。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笤喳,到底是詐尸還是另有隱情为居,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布杀狡,位于F島的核電站蒙畴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捣卤。R本人自食惡果不足惜忍抽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望董朝。 院中可真熱鬧,春花似錦干跛、人聲如沸子姜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哥捕。三九已至,卻和暖如春嘉熊,著一層夾襖步出監(jiān)牢的瞬間遥赚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工阐肤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凫佛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓孕惜,卻偏偏與公主長(zhǎng)得像愧薛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衫画,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容