Nginx的反向代理與負(fù)載均衡--配置Nginx

<pre>

前言

參考鏈接:nginx_百度百科

  • Nginx 是一個非常輕量級的服務(wù)器,他雖輕但是他最大的優(yōu)點就是可以承載大量的并發(fā)案糙,所以說一般的話很少有用 Node 直接去做服務(wù)器讓用戶去訪問的昌罩,因為 Node 本身就需要做非 常非常多的事情喊递,雖然說簡單的可以使用 Node 直接開啟掏熬,但是對于負(fù)載和并發(fā) Node 是弱項敛助,就是反向代理和并發(fā)是 Node 整個的弱項捻浦,所以我們需要在前面用 Nginx 擋一層晤揣,這樣的話對于我們整個的系統(tǒng)的運維架構(gòu)來講也是一個非常得力的一個助手,還有就是跟其他的比如說我們后層整個架構(gòu)的設(shè)計屬于運維的這一塊朱灿,它也是有一種先天優(yōu)勢的這樣的服務(wù)器

概述

主要結(jié)構(gòu)

  • 什么是反向代理與負(fù)載均衡

    • 反向代理

    • 負(fù)載均衡

  • Nginx 負(fù)載均衡的實現(xiàn)

  • HTTP UPstream 模塊

    • 什么是 HTTP Upstream 模塊

    • ip_hash 指令 -- 落到哪個上

    • server 指令 -- server 的權(quán)重

    • UPstream 指令

  • 其他負(fù)載均衡的方法

    • 對于我們前端而言只需要將負(fù)載子我們的項目里面配置好就可以了不需要去太深入的學(xué)習(xí)昧识,只要給人家運維一眼一口,然后知道怎么配合就完了盗扒,因為對于運維來講滞诺,他們是不太懂 Node 的什么什么東西的形导,他們只會配這個 Nginx 的,所以說我們學(xué)這個的話只要學(xué)的夠用就 ok 了

1. 什么是反向代理與負(fù)載均衡

  1. 反向代理
image.png
  • 舉例說明:

    • 比如說平時我們上谷歌上不了然后需要翻墻习霹,谷歌是我們明確的去要訪問的站點朵耕,這個時候我們會用一些翻墻的工具(代理服務(wù)器),這個代理服務(wù)器幫我們?nèi)』毓雀杞o我們看淋叶,這個就是一個正向的代理

    • 那么反向 代理剛好是相反的:我們不知道去取哪一臺機器阎曹,然后代理幫我們?nèi)ト。缓蟀讶〉降膬?nèi)容返回給我們

    • 一個是明確的知道煞檩,一個是不知道处嫌,這就是正向代理和反向代理

  • 上圖解釋

    • 就是用自己的計算機 A 想訪問國外的網(wǎng)站 B ,訪問不了斟湃,就有一個中間的服務(wù)器 C 它去訪問國外的網(wǎng)站 B 熏迹,其實如果是把這個 C 裝到我們自己的電腦上,我們自己的電腦訪問 C 凝赛,然后 C 再去訪問 B 注暗,這個時候這個 C 就叫代理服務(wù)器,這個時候就是正向代理墓猎,他有一個特點捆昏,就是我們一定知道要訪問哪個網(wǎng)站

    • 還有就是當(dāng)我們有一個服務(wù)器集群,而且服務(wù)器集群中的每臺服務(wù)器的內(nèi)容都是一樣的時候毙沾,同樣我們從個人的電腦訪問到比如說 現(xiàn)在我們有四臺 Node 的機器 骗卜,但是我們無法訪問,這個時候有第三方的服務(wù)器是可以訪問到 那四個 Node 的機器的 左胞,這個時候我們就可以借助這個第三方的服務(wù)器去訪問寇仓, 但是我們并不知道它最后會落到四臺中的哪一臺機器上,這個就是反向代理

反向代理的用途

image.png
  1. 負(fù)載均衡
image.png

image.png
  • 跟上面的反向代理有一個息息相關(guān)的東西就是負(fù)載均衡

    • 就是上面的四臺機器烤宙,你不知道最終要找的是誰焚刺,但是 Nginx 知道,它會幫你找到壓力最小的那個服務(wù)器然后返回給你门烂,就這樣的可以分擔(dān)你的壓力
  • 上圖需要注意的點

    • 在建立很多很多個服務(wù)器的時候乳愉,要確保每臺服務(wù)器上的東西得是一樣的

    • 上圖中所說的中間服務(wù)器,在本章中指的就是 Nginx

2. Nginx 負(fù)載均衡的實現(xiàn)

image.png

3. HTTP UPstream 模塊

  1. 什么是 HTTP UPstream 模塊
image.png
  1. ip_hash 指令
image.png
  • 這個是比如用戶落在這樣一臺服務(wù)器上了屯远,然后下次用戶一刷新又落到別的上面了蔓姚,這個就不太對了,所以 ip_hash 是為了保證用戶再次刷新的時候還能落到他之前落到的那臺服務(wù)器上慨丐,這樣就 ok 了
  1. server 指令
image.png
  • 這個是:你可以指定這臺服務(wù)器的權(quán)重坡脐,就是說如果你知道了這臺機器要比別的優(yōu)秀,那么你可以給它的權(quán)重給標(biāo)的高一點房揭,那么更多的請求就會落到這個你認(rèn)為優(yōu)秀的機器上面备闲,默認(rèn)是 1:1:1 的晌端,這個 1:1:1 可以舉成 2:1:1 的例子來說明:就是現(xiàn)在有三臺機器,第一臺的權(quán)重被設(shè)置為了 2 后面兩臺都是 1 恬砂,這樣的話落到第一臺的幾率就是 2 / 3咧纠,后面兩臺的都是 1 / 3
  1. UPstream 指令
image.png

4. 其他負(fù)載均衡的方法

image.png

上面的主要是理論下面是實戰(zhàn)操作

macOS 部署 Nginx

image.png
  1. 第一步的網(wǎng)址是 MAC 系統(tǒng)下的一個神器,它是一個 macOS 缺失的軟件包管理器 https://brew.sh/index_zh-cn.html

  2. 接著就是打開命令行終端依次輸入命令

//安裝 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

//查看是否有 nginx 的包
brew search nginx

命令行輸出如下:打了一個對勾就證明是有的泻骤,接下來就可以安裝了

image.png
//安裝 nginx 
brew install nginx
//裝過之后可以查看 nginx 對應(yīng)的一些版本的信息
brew info nginx
//查看 nginx 版本信息
nginx -v
//啟動 nginx 漆羔,這個默認(rèn)的端口號是 8080
nginx
//可以暫停 nginx 
nginx -s stop
//再次啟動 nginx 
nginx

  1. 這個是時候在瀏覽器中輸入 localhost:8080 就可以打開 nginx 首頁了
image.png
  • 這個時候你會發(fā)現(xiàn)頁面 title 的 icon 是 Jenkins 的頭像,這個原因是因為如果你裝過 Jenkins 的話狱掂,它是非常頑固的會不停的去折騰演痒、重啟你的 8080 端口,你如果是 kill 是殺不掉的趋惨,你需要用下面的命令就可以把它給停掉了
//停掉 jenkins 
sudo launchctl unload/Library/LaunchDaemons/org.jenkins-ci.plist
//停掉之后如果想啟動 jenkins 
systemctl start jenkins

  1. 想要進(jìn)行上面的 反向代理和負(fù)載均衡 還需要對 nginx 進(jìn)行配置
//停止 nginx 服務(wù)
nginx -s stop
//重新加載 nginx 配置文件
nginx -s reload

  1. 打開 nginx 具體安裝目錄 查看配置文件
  • /usr/local/etc/nginx/ 這個是 macOS 下 nginx 的安裝目錄鸟顺,其他系統(tǒng)的可能會不大一樣
//先進(jìn)入 nginx 目錄的上一級目錄
cd /usr/local/etc/
//查看該目錄下的所有文件,可以在下圖看到 nginx 目錄
ls

image.png
//再進(jìn)入 nginx 目錄
cd nginx
//查看該目錄下的所有文件器虾,可以在下圖看到 nginx 目錄下的所有文件
ls

image.png
  • 可以看到里面有個 nginx.conf 的文件讯嫂,這個就是 nginx 的配置文件,上面的 nginx2.conf 是之前做的備份可以忽略掉
//查看配置文件的內(nèi)容曾撤,下圖是內(nèi)容的一部分端姚,這個里面的內(nèi)容就是 nginx 默認(rèn)的配置內(nèi)容
cat nginx.conf

image.png
  • 對上圖的一些解釋

    • #user 指的是哪個用戶能用晕粪,可以將后面的 nobody 修改成你指定誰用的那個用戶的用戶名

    • worker_processes 這個是你的一個工作的進(jìn)程挤悉,其實實際上指的就是 CPU 的核數(shù),如果你是 4 核的話巫湘,這個值就是 4装悲,你需要看到自己的電腦是幾核的處理器,然后你可以在這里面做相應(yīng)的設(shè)置尚氛,最多就是 2 倍诀诊,一般就是標(biāo)準(zhǔn)的幾核就是幾個 或者 2 倍,這個不能亂設(shè)

    • #error_log 這個就是整個產(chǎn)生錯誤的日志

      • nginx 的日志跟我們 Node 的日志比一點都不遜色阅嘶,它們的區(qū)別是:nginx 可以完全的記錄所有的請求的日志属瓣,因為它是一個向外去擴散的一個去做負(fù)載均衡的口子,你的那個 Node 是你的項目里的一些 log 讯柔,兩個人都各自有分工

      • 這個 log 是會非常龐大的抡蛙,所以像有的一些大公司會有專門去存 log 的服務(wù)器,那些數(shù)據(jù)挖掘的人或者是運維會每天去查這個日志魂迄,從這些日志里其實可以拿到很多很多的東西粗截,所以這個日志是至關(guān)重要的,對于大公司來講這個是比命還重要的東西捣炬,所以 nginx 的日志是萬萬不能丟的熊昌,任何語言里的日志它們都會分成 level(級別)

      • 上面的第一行就是 出錯的日志 绽榛,第二行是警告的,第三行是基本信息

    • #pid 這個是 nginx 非常重要的一個配置文件婿屹,這個就別動就好了

    • events -> worker_connections 這個就是整個的連接數(shù)灭美,就是說你一下子往你的這個上面壓多少

    • http 模塊 在這個里面可以去指定一下所謂的我們平時的 gzip 、Etag 等等都是從這里去開啟的

      • #gzip 把前面的 # 號去掉选泻,然后這個 gzip 就開啟了冲粤,在我們?nèi)プ鲂阅軆?yōu)化的時候在這里面把 Etag 一開就很簡單,還包括那個 express 過期時間都在這里

      • server

        • listen 這里是監(jiān)聽 8080 端口

        • #charset koi8-r 這個是它輸出的語言

        • access_log 這個是它的日志

        • location 這個非常重要页眯,里面的 root 不是指的同戶名梯捕,而是當(dāng)前的 html 文件夾,它會從下面的順序依次開始找窝撵,直到找到對應(yīng)的一個文件然后去給你吐

        • error_page 這個是 Node 控制出錯的傀顾,有時你會發(fā)現(xiàn)百度、騰訊或者是其他的一些公司的 404 是一樣的碌奉,原因就是在這的短曾,所有的請求都固定到這,然后他把一些出錯都控制好 是這樣的一個原因

        • 下面還有一些 500 502 503 504 赐劣,他都把這些出錯導(dǎo)到 50x 去了嫉拐,所以這些不是真正的內(nèi)部的系統(tǒng)去做的。而是一些做負(fù)載均衡的服務(wù)器去做的

        • `location ~ .php<pre 這些就是用正則去匹配一些更復(fù)雜的魁兼,就是你真正的路由都可以在這里面去寫

  1. 接下來就是我們要給運維做什么
  • 我們要給運維做的東西相對來說比較簡單婉徘,不用去搞那些雜七雜八的,注意:修改文件的時候要記得把注釋刪掉
//這個就是我們前端需要給運維做的東西咐汞,這個是從復(fù)雜的 nginx 里去抽出來的
worker_processes 4;//這個是你的一個工作的進(jìn)程盖呼,其實實際上指的就是 CPU 的核數(shù)
events{
    worker_connections 1024;//這個就是整個的連接數(shù)凉敲,就是說你一下子往你的這個上面壓多少
}
//上面兩個其實你不給運維的話也是可以的涕刚,他都不要,你寫了也沒用禽炬,關(guān)鍵的就是下面的 http 
http{
    //這個是負(fù)載均衡的所有的 server 植阴,這里的 IP 地址需要寫成你需要用到的真實有效的才行
    upstream firsttest{
        server 192.168.230.128;
        server 192.168.230.129;
    }

    server{
        //通過 server 監(jiān)聽的是 8080
        listen 8080;
        //當(dāng)你訪問 / 這個路由地址的時候 通過下面的  proxy_pass 代理去訪問 firsttest 然后就可以了
        location / {
            proxy_pass http://firsttest;
        }
    }
}

  • 無注釋版本
worker_processes 4;
events{
    worker_connections 1024;
}
http{
    upstream firsttest{
        server 192.168.230.128;
        server 192.168.230.129;
    }

    server{
        listen 8080;
        location / {
            proxy_pass http://firsttest;
        }
    }
  }

  • 接著是對照上面的設(shè)置修改你的 nginx.conf 文件

    • 先要對之前的 nginx.conf 文件進(jìn)行備份
    //先進(jìn)入到系統(tǒng)安裝的 nginx 目錄下
    cd /usr/local/etc/nginx
    //備份配置文件
    cp nginx.conf nginx.conf.back
    //備份之后再查看是否已成功生成文件
    ls
    
    
image.png
*   修改 nginx.conf 文件蟹瘾,將下面的代碼片段里面的設(shè)置相應(yīng)的復(fù)制按照規(guī)則復(fù)制進(jìn)這個文件中,之后保存即可

```
worker_processes 4;
events{
worker_connections 1024;
}
http{
    upstream firsttest{
    server 192.168.230.128;
    server 192.168.230.129;
  }

server{
    listen 8080;
    location / {
        proxy_pass http://firsttest;
      }
  }
}

```
  • 修改并保存之后掠手,在瀏覽器中打開你設(shè)置的兩個服務(wù)器 ip 地址進(jìn)行查看憾朴,打不開的原因也會出現(xiàn),比如:防火墻未關(guān)閉導(dǎo)致的
image.png
image.png
  • 為了顯示區(qū)別 我將兩臺服務(wù)器上的文字稍作了修改惨撇,修改之后伊脓,還需要重載 nginx 才會生效哦
//先暫停
nginx -s stop
//進(jìn)入 html 目錄修改 index.html
cd /usr/share/nginx/html
vi html
//修改之后保存并退出
ESC 鍵
:
wq
//重載
nginx -s reload
//啟動
nginx

  • 現(xiàn)在刷新瀏覽器,會發(fā)現(xiàn) 128 和 129 兩臺服務(wù)器分別能落到的幾率為 50%

[圖片上傳中...(image.png-79fb06-1517377202839-0)]

  • 這里我發(fā)現(xiàn)了一個問題,因為我的兩臺服務(wù)器一個是 Centos 一個是 Ubuntu 128报腔,Centos 129 的里面的 index.html 文件修改成功了多了 192.168.230.129 端口號株搔,但是 Ubuntu 那個沒有

    • 解決上面 Ubuntu 的問題
    //先查看 nginx 配置文件
    cat /etc/nginx/nginx.conf
    
    
    • 會發(fā)現(xiàn) http 設(shè)置里面有這樣的默認(rèn)設(shè)置
image.png
*   這里我再次分別進(jìn)入這兩個目錄

```
//發(fā)現(xiàn)只有這個目錄下有個 default 文件
cd /etc/nginx/sites-enabled
ls
//查看該文件
cat default

```

*   發(fā)現(xiàn)里面引用的是 root 用戶下的 `/var/www/html`  目錄中的 html
image.png
*   這時去修改 `/var/www/html` 目錄下的 html 文件

```
cd /var/www/html
//查看目錄下包含的文件  發(fā)現(xiàn)只有    index.nginx-debian.html 文件
ls
//使用下面的命令以圖形化的方式打開該目錄(適合 Ubuntu 下使用的命令) 再在編輯器中 修改 index.nginx-debian.html 文件 保存并退出  
nautilus ./
//先將 nginx 運行暫停
//再重載

//最后啟動
systemctl start nginx
//最后查看是否是 running 狀態(tài)
systemctl status nginx

```
image.png
*   Ubuntu 下重啟期間總是會出現(xiàn)一些莫名奇妙的問題,我的解決方法就是

```
//先找到在運行中的與 nginx 相關(guān)的所有進(jìn)程
ps -eaf |grep nginx
//然后使用 kill -9 命令將他們一個一個的殺掉
kill -9 1250
//再重新啟動 nginx
systemctl start nginx

```
  • 這個時候再去刷新查看瀏覽器纯蛾,會發(fā)現(xiàn)已經(jīng)成功了 129 128 每次落到的幾率都是 50%
image.png
  • 還可以在修改 nginx.conf 配置文件中的 http 對象纤房,這里我是在 Ubuntu 下里面的文件
//先暫停 nginx  
systemctl stop nginx
//進(jìn)入配置文件目錄
cd /etc/nginx
//以圖形化的界面打開該目錄
nautilus ./
//在編輯器中編輯 nginx.conf 配置文件
//在 firsttest 里面增加一個 ip_hash 屬性 一定記得要加 分號
upstream firsttest{
    ip_hash;
}
//之后再重載一遍
nginx -s reload
//運行
nginx

image.png
  • 再刷新瀏覽器,會發(fā)現(xiàn)訪問的是 Ubuntu 這個 128

    的增加了 ip_hash 的服務(wù)器時翻诉,只要你第一個訪問成功了炮姨,那么它下次就會默認(rèn)還訪問這個上次訪問成功了的服務(wù)器 ,不會再落到另一臺服務(wù)器上了碰煌,Centos 129 那個服務(wù)器就還是之前的 50% 幾率的動態(tài)落

image.png
  • 還可以在里面加一個權(quán)重的東西舒岸,參照上面的方法,權(quán)重是添加到 IP 地址后面的芦圾,下圖中加了屬性 值為 2 這樣的話如果是頁面刷新三次的話 落到 128 Ubuntu 這臺服務(wù)器上的幾率就是 3 / 2 蛾派,要先把上面加的 ip_hash 刪掉,測試才會有效
image.png

下面主要是一些 在 Ubuntu 和 Centos 下與上面的 MAC 下的具體操作差異个少,還有就是操作時遇到的一些坑

  1. 裝包洪乍,Centos 的話需要 先將Centos的yum源更換為國內(nèi)的阿里云源 參考地址:將Centos的yum源更換為國內(nèi)的阿里云源 再進(jìn)行安裝
//Centos
yum install nginx

//Ubuntu 
sudo apt-get install nginx

  1. 在修改完 nginx.conf 文件并保存后 重載時會報錯

    • 下面是報錯的文本

    nginx: [error] invalid PID number "" in "/run/nginx.pid"

    • 需要先執(zhí)行一行命令,才能再執(zhí)行重載
    //   /etc/nginx 是 ubuntu  和 centos 下的安裝目錄
    cd /etc/nginx
    nginx -c /etc/nginx/nginx.conf
    //然后再進(jìn)行重載
    nginx -s reload
    
    
  2. 啟動和暫停命令使用 systemctl

//啟動 nginx 
systemctl start nginx
//暫停 nginx 
systemctl stop nginx
//重啟 nginx 
systemctl restart nginx

  1. 如果在啟動時遇到下面的錯誤夜焦,可移步至 centos7安裝nginx

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

  1. Ubuntu 和 Centos nginx 的具體文件位置

    • nginx 配置文件的目錄 /etc/nginx/

    • nginx 項目文件的目錄 /usr/share/nginx/

  2. 有時在本機打不開的原因:防火墻未關(guān)閉壳澳、nginx 未啟動

  3. 在 Ubuntu 下修改文件時先進(jìn)入目錄下再使用 nautilus ./ 命令以圖形化的形式打開目錄,再在編輯器中進(jìn)行編輯并保存比較方便

  4. 這里我使用的是 Centos 和 Ubuntu 兩個虛擬機來模擬的服務(wù)器

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茫经,一起剝皮案震驚了整個濱河市巷波,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌科平,老刑警劉巖褥紫,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜性,死亡現(xiàn)場離奇詭異瞪慧,居然都是意外死亡,警方通過查閱死者的電腦和手機部念,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門弃酌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人儡炼,你說我怎么就攤上這事妓湘。” “怎么了乌询?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵榜贴,是天一觀的道長。 經(jīng)常有香客問我妹田,道長唬党,這世上最難降的妖魔是什么鹃共? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮驶拱,結(jié)果婚禮上霜浴,老公的妹妹穿的比我還像新娘。我一直安慰自己蓝纲,他們只是感情好阴孟,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著税迷,像睡著了一般永丝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箭养,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天类溢,我揣著相機與錄音,去河邊找鬼露懒。 笑死闯冷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懈词。 我是一名探鬼主播蛇耀,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坎弯!你這毒婦竟也來了纺涤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤抠忘,失蹤者是張志新(化名)和其女友劉穎撩炊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崎脉,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡拧咳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了囚灼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骆膝。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖灶体,靈堂內(nèi)的尸體忽然破棺而出阅签,到底是詐尸還是另有隱情,我是刑警寧澤蝎抽,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布政钟,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏养交。R本人自食惡果不足惜衷戈,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望层坠。 院中可真熱鬧殖妇,春花似錦、人聲如沸破花。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽座每。三九已至前鹅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峭梳,已是汗流浹背舰绘。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葱椭,地道東北人捂寿。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像孵运,于是被迫代替她去往敵國和親秦陋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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