11月3日 tomcat

1、tomcat的安裝環境

tomcat使用java語言來編寫,tomcat和php一樣都是用來處理動態程序的(也可以解析靜態資源),tomcat可以處理.jsp或者.do結尾的動態文件,處理時并不是tomcat本身去處理,而是交給后端的jvm來處理,也就是java虛擬機來處理,處理之前先裝入tomcat的類文件,然后由jvm來處理,所以安裝tomcat必須先安裝JDK(Java Development Kit),java開發工具箱在java虛擬機之上,安裝了JDK就相當于安裝java虛擬機,JDK有兩種開源的軟件可以安裝,OpenJDK和Oracle JDK

1、OpenJDK的安裝
yum install java-1.8.0-openjdk-devel.x86_64 
確定JDK是否安裝可以使用如下命令
[root@centos6 ~]#java -version
openjdk version "1.8.0_121"    ---可以看到版本,說明安裝成功
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
2、Oracle JDK的安裝
在oracle官方網站上下載jdk-8u151-linux-x64.rpm
http://www.oracle.com/technetwork/java/javase/downloads/index.html  
[root@centos7 app]#rpm -ivh jdk-8u151-linux-x64.rpm 
[root@centos7 latest]#cd /usr/java/
[root@centos7 java]#ll ---有兩個軟鏈接文件,一個指向的是默認的,一個指向的是最新的,這里只有一個版本,如果有多個版本這兩個軟鏈接會分別指向不同的版本
total 0
lrwxrwxrwx 1 root root  16 Nov  3 21:01 default -> /usr/java/latest    
drwxr-xr-x 9 root root 268 Nov  3 21:01 jdk1.8.0_151
lrwxrwxrwx 1 root root  22 Nov  3 21:01 latest -> /usr/java/jdk1.8.0_151
[root@centos7 java]#cd latest/
[root@centos7 latest]#ls
bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
[root@centos7 latest]#cd bin/   ---發現有很多java程序文件,因為不在PATH變量里,所以最好定義PATH變量
[root@centos7 bin]#ls
appletviewer  jar        javadoc         javapackager  jconsole  jhat   jmc         jsadebugd  jvisualvm     pack200     rmiregistry  tnameserv  xjc
ControlPanel  jarsigner  javafxpackager  java-rmi.cgi  jcontrol  jinfo  jmc.ini     jstack     keytool       policytool  schemagen    unpack200
extcheck      java       javah           javaws        jdb       jjs    jps         jstat      native2ascii  rmic        serialver    wsgen
idlj          javac      javap           jcmd          jdeps     jmap   jrunscript  jstatd     orbd          rmid        servertool   wsimport
[root@centos7 latest]#vim  /etc/profile.d/java.sh
PATH=/usr/java/latest/bin/:$PATH
[root@centos7 latest]#.  /etc/profile.d/java.sh  ---生效
[root@centos7 latest]#java -version     ---發現java環境已經準備好了,定義完PATH變量,java虛擬機就會自動開啟
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

2、安裝tomcat

安裝tomca也有兩種方法,一種是base倉庫,另外一種就是到官方站點下載,這里在上面準備好的OpenJDK上用base倉庫安裝,在Oracle JDK上安裝編譯好的二進制包

1、Base Repo:
[root@centos6 ~]#yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
[root@centos6 tomcat]#rpm -q tomcat  ---查看版本
tomcat-7.0.73-1.el6.noarch
[root@centos6 tomcat]#cat /usr/sbin/tomcat   ---可以看到tomcat并不是一個二進制的程序,而是一個腳本文件,通過腳本文件調用java程序,
/etc/tomcat   ---配置文件目錄
/etc/tomcat/server.xml   ---主配置文件
/etc/tomcat/tomcat-users.xml   ---用戶認證的賬號和密碼文件;角色(role),用戶(User),此文件在tomcat啟動時被裝入內存
/usr/share/tomcat/webapps    ---webapp的默認根目錄
service tomcat start
[root@centos6 tomcat]#ps -aux    ---我們發現tomcat啟動的是一個java虛擬機程序
tomcat     5990 15.1  9.8 2938264 98592 ?       Sl   03:29   0:06 /usr/lib/jvm/j
[root@centos6 tomcat]#jps -v   ---可以看到啟動過程,先裝載tomcat的類文件完成自舉,然后運行java虛擬機程序,所以tamcat真正運行的是一個java程序
5990 Bootstrap -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
6056 Jps -Dapplication.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64 -Xms8m
[root@centos6 tomcat]#ss -nltp   ---從這也可以看到運行的是java進程
State       Recv-Q Send-Q                                              Local Address:Port                                                Peer Address:Port 
LISTEN      0      1                                                ::ffff:127.0.0.1:8005                                                          :::*      users:(("java",5990,52))
LISTEN      0      100                                                            :::8009                                                          :::*      users:(("java",5990,48))
LISTEN      0      100                                                            :::8080                                                          :::*      users:(("java",5990,47))
監聽的端口有三個:8080為http協議的接口,8009為ajp協議的接口,8005為管理接口
[root@centos6 tomcat]#telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN   
Connection closed by foreign host.
[root@centos6 tomcat]#ss -nlt    ---發現tomcat實例被關閉了,所以這個管理端口監聽在本地的8005,這樣比較安全,不然誰telnet到這個端口都可以關閉tomcat,不過一般這個端最好不要監聽,這樣更安全
如何進行安全設置
vim /etc/tomcat/server.xml
 <Server port="8005" shutdown="SHUTDOWN">
把上面的改成port=-1,就表示關閉端口
或者openssl rand -hex 10 生成一個隨機數來當shuntdown,這樣別人就不知道該怎么關閉了
http://172.18.21.106:8080/   ---訪問http協議的接口可以看到web站點
2、Tomcat binary release
在官方網站上下載
http://tomcat.apache.org/
tomcat是屬于apache旗下的產品
這里下載的是apache-tomcat-7.0.82.tar
[root@centos7 app]#tar -xvf apache-tomcat-7.0.82.tar.gz -C /usr/local
[root@centos7 local]#ln -s apache-tomcat-7.0.82/ tomcat
[root@centos7 local]#cd tomcat
[root@centos7 tomcat]#useradd tomcat   ---運行tomcat時最好以普通用戶的身份運行,所以創建一個tomcat用戶
[root@centos7 tomcat]#chown -R root:tomcat ./*   ---修改tomcat目錄下的文件的所有者和所屬組,這里只修改所屬組為tomcat是因為怕tomcat賬號被別人盜用后,登陸此賬號后修改tomcat內的二進制程序文件
[root@centos7 tomcat]#chown -R tomcat ./{logs,temp,work,webapps,conf}   ---將這些目錄的所有者修改為tomcat,因為在執行tomcat時有可能要修改這些目錄
內的文件
[root@centos7 tomcat]#vim /etc/profile.d/tomcat.sh
PATH=/usr/local/tomcat/bin/:$PATH
[root@centos7 tomcat]#. /etc/profile.d/tomcat.sh
[root@centos7 tomcat]#su - tomcat
[tomcat@centos7 ~]$catalina.sh start    ---利用這個命令來啟動和關閉tomcat
[tomcat@centos7 ~]$catalina.sh --help    
[tomcat@centos7 ~]$ss -nlt    ---發現端口已經打開
[tomcat@centos7 ~]$ps -aux   ---發現是以tomcat的身份在運行,如果用root用戶去開啟tomcat會發現tomcat是以root的身份在運行
[root@centos7 tomcat]#catalina.sh version
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.82    ---可以看到tomcat的版本
Server built:   Sep 29 2017 12:23:15 UTC
Server number:  7.0.82.0
OS Name:        Linux
OS Version:     3.10.0-514.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_151-b12    ---java虛擬機的版本
JVM Vendor:     Oracle Corporation

3、tomcat的常用組件配置

  • Server:代表tomcat instance,即表現出的一個java進程;監聽在8005端口,只接收“SHUTDOWN”。各server監聽的端口不能相同,因此,在同一物理主機啟動多個實例及多個java進程時,需要修改其監聽端口為不同的端口;
  • service:用于實現將一個或多個connector組件關聯至一個engine組件;
  • Connector組件:負責接收請求,連接內部的Engine,常見的有三類http/https/ajp;
    進入tomcat的請求可分為兩類:
    (1) standalone : 請求直接來自于客戶端瀏覽器;
    (2) 由其它的web server反代:來自前端的反代服務器;
    nginx --> http connector --> tomcat
    httpd(proxy_http_module) --> http connector --> tomcat
    httpd(proxy_ajp_module) --> ajp connector --> tomcat
    屬性:
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    address:監聽的IP地址;默認為本機所有可用地址;
    maxThreads:最大并發連接數,默認為200;
    enableLookups:是否啟用DNS查詢功能;
    acceptCount:等待隊列的最大長度;
    secure="TRUE" 后面兩個屬性是啟用https的配置,一般tomcat不會使用https,而不是在前段的反代上設置,因為tomcat本身運行起來已經很慢了,加上https就更慢了
    sslProtocol:ssl協議類型
  • Engine組件:Servlet實例,即servlet引擎,其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義默認的虛擬主機;
  • Host組件:位于engine內部用于接收請求并進行相應處理的主機或虛擬主機
 <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
</Host>
appBase:設置默認網頁文件的存放路徑,也就是根目錄,相當于httpd的document root
unpackWARs:如果我們拿到的一個程序是.war格式的,把它放到網頁文件存放的目錄下會自動展開
autoDeploy:是否啟動自動部署功能
  • Context組件:用來定義一個獨立的應用,也就是你訪問哪個uri時訪問的是哪個目錄,相當于http里的別名
    示例:
    <Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>
  • Valve組件:
    Valve存在多種類型:
    定義訪問日志:org.apache.catalina.valves.AccessLogValve
    定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
Paste_Image.png

webapp歸檔格式:
.war:webapp; ---一般生產中用到的都是這種格式的打包好的程序文件,只要把它扔到網頁程序文件存放的目錄下就會自動展開這個文件,不用解壓包
.jar:EJB的類打包文件(類庫);
.rar:資源適配器類打包文件;
.ear:企業級webapp;
JSP WebAPP的組織結構:
/: webapps的根目錄
index.jsp:主頁;
...
WEB-INF/:當前webapp的私有資源路徑;通常用于存儲當前webapp的web.xml和context.xml配置文件;
META-INF/:類似于WEB-INF/;
classes/:類文件,當前webapp所提供的類;
lib/:類文件,當前webapp所提供的類,被打包為jar格式;
tree /usr/share/tomcat/webapps/ 可以看到根目錄結構

4、部署(deploy)webapp的相關操作

  • deploy:將webapp的源文件放置于目標目錄(網頁程序文件存放目錄),配置tomcat服務器能夠基于web.xml和context.xml文件中定義的路徑來訪問此webapp;將其特有的類和依賴的類通過class loader裝載至JVM;
  • 部署有兩種方式:
    自動部署:auto deploy
    手動部署:
    冷部署:把webapp復制到指定的位置,而后才啟動tomcat;
    熱部署:在不停止tomcat的前提下進行部署;
    部署工具:manager、ant腳本、tcd(tomcat client deployer)等;
    undeploy:拆除(反部署),停止webapp,并從tomcat實例上卸載webapp;
    start:啟動處于停止狀態的webapp;
    stop:停止webapp,不再向用戶提供服務;其類依然在jvm上;
    redeploy:重新部署;
    示例:冷部署一個test程序
mkdir /app/test/{WEB-INF} -pv   ---模仿根目錄的結構創建一個測試的程序目錄
cd /app/test/
vim index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
     <head>
    <title>Test Page</title>
     </head>
     <body>
    <% out.println("hello world");
    %>
     </body>
</html>
service tomcat stop    ---冷部署要先停止服務
cp -r /app/test/ /usr/share/tomcat/webapps/   ---把這個寫好的動態程序放到網站的根目錄下
service tomcat start
測試
http://172.18.21.106:8080/test/   發現hello world 部署成功

5、tomcat配置

示例1虛擬主機

vim /etc/tomcat/server.xml 
 <Host name="node1.magedu.com"  appBase="/app/website1" ---網站的根目錄
            unpackWARs="true" autoDeploy="true">
</Host>
mkdir -pv /app/website1/ROOT/{WEB-INF,META-INF,classes,lib}
vim  /app/website1/ROOT/index.jsp 
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
     <head>
        <title>Test Page</title>
     </head>
     <body>
        <% out.println("hello node1.magedu.com");
        %>
     </body>
</html>
service tomcat restart
在客戶端測試
vim /etc/hosts   ---修改hosts文件保證能夠解析主機名
[root@redhat7 ~]#elinks -dump http://node1.magedu.com:8080/
   hello node1.magedu.com

總結:/app/website1為網站的根目錄,在根目錄下創建一個ROOT目錄,把程序文件放到這個目錄下,在網頁上輸入http://node1.magedu.com:8080/就可以自動找到這個程序,如果根目錄下創建的不是ROOT目錄,而是別的目錄,比如test目錄,訪問網站的時候就要輸入http://node1.magedu.com:8080/test,就像我們輸入http://172.18.21.106:8080/,會自動訪問默認虛擬主機的/usr/share/tomcat/appwebs/ROOT目錄的程序文件,也就是網站的默認主頁面,是一個湯姆貓
示例2Context組件

vim /etc/tomcat/server.xml 
  <Host name="node1.magedu.com"  appBase="/app/website1"
            unpackWARs="true" autoDeploy="true">
                <Context path="/testapp" docBase="/app/website2" reloadable="true"/>    ---表示當你訪問的uri是testapp的時候,訪問的目錄是/app/website2,相當于http里面的別名, reloadable是否重新裝載
        </Host>
[root@centos6 app]#cd /app/website2
[root@centos6 website2]#ls
index.jsp WEB-INF
測試
elinks -dump http://node1.magedu.com:8080/testapp
 hello node1.magedu.com app

示例3定義訪問日志

vim /etc/tomcat/server.xml 
<Host name="node1.magedu.com"  appBase="/app/website1"
            unpackWARs="true" autoDeploy="true">
                <Context path="/testapp" docBase="/app/website2" reloadable="tr
ue"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="node1_access_log." suffix=".log" ---prefix表示日志文件名以什么為前綴    suffix表示日志文件名以什么為后綴
               pattern="%h %l %u %t "%r" %s %b" />  ---表示日志文件的格式
        </Host>
service tomcat restart
測試
[root@redhat7 ~]#elinks -dump http://node1.magedu.com:8080/testapp
   hello node1.magedu.com app
cat /var/log/tomcat/node1_access_log.2017-11-04.log

示例4 定義訪問控制

 <Host name="node1.magedu.com"  appBase="/app/website1"
            unpackWARs="true" autoDeploy="true">
                <Context path="/testapp" docBase="/app/website2" reloadable="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="node1_access_log." suffix=".log"
               pattern="%h %l %u %t "%r" %s %b" />
         <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172\.18\.21\.7"/>   ---表示只允許172.18.21.7訪問,如果允許多個ip地址中間用分號隔開,也可以使用deny表示拒絕
        </Host>

6、manager圖形界面設置

QQ截圖20171104152040.png

1、Manager App配置

vim /etc/tomcat/tomcat-users.xml   ---啟用一個角色,并定義登錄的用戶名和密碼,用這個賬號可以登錄到上圖中的上面兩個,Host Manager還要重新啟用角色和定義登錄用戶名和密碼
<role rolename="manager-gui"/>
<user username="tomcate" password="magedu" roles="manager-gui"/>
service tomcat restart
然后點擊上圖中的Manager App就可以進入到圖形界面
利用圖形界面進行熱部署
[root@centos6 app]#cp -r test/ /app/website3   ---創建一個websit3的目錄
[root@centos6 app]#ls
test  website1  website2  website3
[root@centos6 app]#cd website3
[root@centos6 website3]#ls  ---里面有index.jsp文件
classes  index.jsp  lib  META-INF  WEB-INF

在圖形界面進行如下設置

Paste_Image.png

點擊Deploy

QQ截圖20171104154310.png

發現熱部署成功,點擊myapp就可以訪問網頁內容了
進入Server Status

QQ截圖20171104155601.png

2、Host Manager配置

vim /etc/tomcat/tomcat-users.xml ---定義一個角色和登錄的用戶名和密碼
<role rolename="admin-gui"/> 
<user username="tomcat" password="magedu" roles="admin-gui"/>
service tomcat restart

可以在此圖形界面下添加一個虛擬主機

Paste_Image.png

注意:通過上述圖形界面進行熱部署或者添加虛擬主機都是在內存中的,重啟主機后都會失效。

7、實現LNT動靜分離

這里nginx和tomcat在同一個主機,使用nginx反向代理至tomcat

1、安裝并啟動tomcat
2、安裝nginx并配置
vim /etc/nginx/nginx.conf
在server段增加如下內容
root         /usr/local/tomcat/webapps/ROOT;    ---表示訪問靜態文件就訪問nginx的這個目錄,此目錄是tomcat默認根目錄,此tomcat不是yum安裝的,是通過二進制安裝的,所以默認根目錄路徑和yum安裝的不同
 index index.jsp;
        location ~* \.(jsp|do)$ {   ---訪問的是jsp或者do結尾的動態文件就調度到后端主機tomcat
        proxy_pass http://127.0.0.1:8080;
        }
nginx -t
nginx  ----啟動服務
測試
http://172.18.21.107/    ---這里直接訪問80端口就可以了看到tomcat默認主頁面了

8、實現LAT

這里httpd和tomcat在同一個主機,使用httpd反向代理至tomcat

1、安裝并啟動tomcat
2、安裝httpd服務
[root@centos7 conf]#httpd -M |grep "proxy"  ---查看模塊是否已經加載,如果沒有加載,要在配置文件中加載這些模塊
 proxy_module (shared)
 proxy_ajp_module (shared)    ---表示方向代理時后端服務器是aip協議
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)   ----表示方向代理時后端主機時http協議
 proxy_scgi_module (shared)
 proxy_wstunnel_module (shared)
3、與后端tomcat使用http協議連接時配置
vim /etc/httpd/conf.d/vhost.conf
<virtualhost *:80>
        servername node2.magedu.com
        documentroot "/usr/local/tomcat/webapps/ROOT"
        <directory "usr/local/tomcat/webapps/ROOT">
        require all granted
        </directory>
        proxyrequests off  ---關閉正向代理,不加可以
        proxyvia on    ---在后端服務器響應給客戶端的響應報文中增加一個首部via,via的值為當前代理服務器的主機名,加不加都可以
        proxypreservehost on  ---表示客戶端訪問的時候保留請求報文中的主機頭,比如訪問的是www.magedu.com,如果不保留主機頭,網絡中的主機是通過ip地址通訊的,到服務器后并不知道你要訪問的是哪個虛擬主機,加上這一條就會在情況報文中保留這個主機頭,可以訪問后端固定的虛擬主機。不加也可以
        proxypass "/" "http://127.0.0.1:8080/"  
        proxypassreverse "/" "http://127.0.0.1:8080/"   ---表示客戶端重新發起請求后,比如url重定向時,對于這些重新發起的請求反向代理至哪
</virtualhost>
httpd -t
systemctl start httpd
測試:http://172.18.21.107/
4、與后tomcat連接時使用的ajp協議時的配置
vim /etc/httpd/conf.d/vhost.conf
<virtualhost *:80>
        servername node2.magedu.com
        documentroot "/usr/local/tomcat/webapps/ROOT"
        <directory "usr/local/tomcat/webapps/ROOT">
        require all granted
        </directory>
        proxyrequests off
        proxyvia on
        proxypreservehost on
        proxypass "/" "ajp://127.0.0.1:8009/"
        proxypassreverse "/" "ajp://127.0.0.1:8009/"
</virtualhost>
httpd -t
systemctl reload httpd
測試:http://172.18.21.107/
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375