Tomcat:
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,運行jsp和servlet,使用HTTP與客戶端(通常是瀏覽器)進行通信。Tomcat 是一個小型的輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選,因為Tomcat 技術先進、性能穩定,成為目前比較流行的Web 應用服務器。Tomcat是應用(java)服務器,它只是一個servlet容器,是Apache的擴展,但它是獨立運行的
編程語言:
硬件級:微碼編程,匯編語言
系統級:C,C++,…
應用級:Java, PHP, Python, Ruby, Perl, C#, …
程序:指令+數據
過程式編程:以指令為中心,數據服務于代碼;
對象式編程:以數據為中心,指令服務于數據;
對象,方法(method)
Tomcat的架構:
Tomcat 6支持Servlet 2.5和JSP 2.1的規范,它由一組嵌套的層次和組件組成,一般可分為以下四類:
頂級組件:位于配置層次的頂級,并且彼此間有著嚴格的對應關系;
連接器:連接客戶端(可以是瀏覽器或Web服務器)請求至Servlet容器,
容器:包含一組其它組件;
被嵌套的組件:位于一個容器當中,但不能包含其它組件;
各常見組件:
1、服務器(server):Tomcat的一個實例,通常一個JVM只能包含一個Tomcat實例;因此,一臺物理服務器上可以在啟動多個JVM的情況下在每一個JVM中啟動一個Tomcat實例,每個實例分屬于一個獨立的管理端口。這是一個頂級組件。
2、服務(service):一個服務組件通常包含一個引擎和與此引擎相關聯的一個或多個連接器。給服務命名可以方便管理員在日志文件中識別不同服務產生的日志。一個server可以包含多個service組件,但通常情下只為一個service指派一個server。
連接器類組件:
3、連接器(connectors):負責連接客戶端(可以是瀏覽器或Web服務器)請求至Servlet容器內的Web應用程序,通常指的是接收客戶發來請求的位置及服務器端分配的端口。默認端口通常是HTTP協議的8080,管理員也可以根據自己的需要改變此端口。一個引擎可以配置多個連接器,但這些連接器必須使用不同的端口。默認的連接器是基于HTTP/1.1的Coyote。同時,Tomcat也支持AJP、JServ和JK2連接器。
容器類組件:
4、引擎(Engine):引擎通是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它檢查每一個請求的HTTP首部信息以辨別此請求應該發往哪個host或context,并將請求處理后的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是只是一個容器。如果Tomcat被配置成為獨立服務器,默認引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web服務器的提供Servlet功能的后端,默認引擎將被忽略,因為Web服務器自身就能確定將用戶請求發往何處。一個引擎可以包含多個host組件。
5、主機(Host):主機組件類似于Apache中的虛擬主機,但在Tomcat中只支持基于FQDN的“虛擬主機”。一個引擎至少要包含一個主機組件。
6、上下文(Context):Context組件是最內層次的組件,它表示Web應用程序本身。配置一個Context最主要的是指定Web應用程序的根目錄,以便Servlet容器能夠將用戶請求發往正確的位置。Context組件也可包含自定義的錯誤頁,以實現在用戶訪問發生錯誤時提供友好的提示信息。
要想實現nginx對tomcat的反代,就只能使用http的tomcat。
要想實現httpd對tomcat的反代,可以使用http的tomcat和ajp的tomcat。(ajp:apache jserv protocol)
實現tomcat的安裝:
tomcat是使用Java語言編寫的程序,其運行的代碼也是Java編寫的,所以實現tomcat的應用需要在Java的虛擬機上運行。所以需要安裝另一個軟件:JDK
安裝的方式分為兩種:yum直接安裝。下載最新版的rmp包來安裝。
1 .yum安裝的詳細 步驟:
yum install java-1.8.0-openjdk-deve (安裝jdk.;openjdk是開源的軟件,不是oracle公司的jdk;類似于MySQL和mariad之間的關系。)
yum install tomcat ? tomcat-admin-webapps? (安裝tomcat )
systemctl start tomcat? (開啟tomcat服務)
在瀏覽器上打開tomcat的主頁面:http://192.168.60.20:8080/ (如果服務起來后就會看到tomcat的文檔頁面,因為安裝時安裝了文檔tomcat-docs-webapp)
2 .官網下載包安裝:
JDK下載的官網
http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html
上傳到Linux系統中:
rpm -ivh jdk-8u144-linux-x64.rpm ? (rmp安裝)
安裝目錄:/usr/java/
運行程序目錄:ls /usr/java/latest/bin/
vim /etc/profile.d/java.sh (創建新文件,將jdk的程序目錄加入到環境變量里去。)
export JAVA_HOME=/usr/java/latest/
export PATH=$JAVA_HOME/bin:$PATH
. /etc/profile.d/java.sh? (讓文件生效)
java -version (查看安裝Java的版本信息)
安裝tomcat:
https://tomcat.apache.org/download-80.cgi?Preferred=http%3A%2F%2Fmirrors.hust.edu.cn%2Fapache%2F (tomcat下載的官網)
tar xvf apache-tomcat-8.5.32.tar.gz -C /usr/local/ (將下載下來的tar包解壓)
cd /usr/local/ (進入此目錄下)
ln -sv apache-tomcat-8.5.32 tomcat? (創建軟連接)
useradd tomcat ? (創建tomcat用戶作為運行tomcat程序的用戶)
chown -R :tomcat ./*? (改變tomcat文件夾下的文件屬組)
chown -R tomcat logs/ temp/ work/ ? (將這三個文件的所有者改為tomcat所有)
chmod g+rw logs/
chmod g+rw logs/*(給tomcat的 日志文件添加組的讀和執行的權限,當在切換到tomcat用戶時可以開啟tomcat服務)
chmod g+rx conf/
chmod g+rx conf/*? (給tomcat的配置文件添加組的讀和執行的權限,當在切換到tomcat用戶時可以開啟tomcat服務)
vim /etc/profile.d/tomcat.sh (創建文件將tomcat的程序加入到環境變量當中去)
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin/:$PATH
. /etc/profile.d/tomcat.sh? (讓此配置文件生效)
/usr/local/tomcat/bin/下有個啟動tomcat的腳本:catalina.sh
catalina.sh start? (啟動tomcat服務)
catalina.sh stop ? (停止服務)
catalina.sh –help ? (可以查看其他的命令)
或者切換到tomcat用戶 在開啟服務,這樣比較安全。
su -tomcat
catalina.sh start (啟動服務)
tomcat的配置信息:
端口號:
8080:主端口號
8005:本地管理端口號
8009:ajp的編輯器
tomcat的主頁面:
/usr/local/tomcat/webapps/ROOT/(自己安裝rpm包的路徑)
/usr/share/tomcat/webapps/ROOT/ (使用yum安裝的默認路徑)
創建主頁面index.jsp? (必須是以jsp為結尾的文件)
如果是自己定義的主頁面目錄也必須是在大寫的ROOT文件夾下
tomcat的目錄結構? (對于自己安裝的rpm包;/usr/local/tomcat/)
bin:腳本,及啟動時用到的類;
conf:配置文件目錄;
lib:庫文件,Java類庫,jar;
logs:日志文件目錄;
temp:臨時文件目錄;
webapps:webapp的默認目錄;
work:工作目錄,存放編譯后的字節碼文件;
yum安裝的程序環境各配置文件:
主配置配置文件目錄:/etc/tomcat/
主配置文件:server.xml
webapps存放位置:/var/lib/tomcat/webapps/——>/usr/share/tomcat/webapps/? (鏈接的兩個路徑)
http://192.168.60.20:8080
打開瀏覽器系統默認的會顯示/var/lib/tomcat/webapps/ROOT/index.jsp的文件主頁面
如果在/var/lib/tomcat/webapps/下創建一個靜態的文件夾存放靜態的文件:echo ttt > /var/lib/tomcat/webapps/hh/index.html
只有主頁面路徑必須要放在ROOT/下如果是自己創建的資源文件只需要放在/var/lib/tomcat/webapps/下就可以了。
http://192.168.60.20:8080/hh/(就會顯示創建的靜態頁面資源)
examples
manager
host-manager
docs
Unit File:tomcat.service
環境配置文件:/etc/sysconfig/tomcat
/etc/tomcat/tomcat.conf 或者/etc/sysconfig/tomcat:用于定義tomcat系統資源的配置文件。
tomcat的配置文件構成:vim /etc/tomcat/server.xml
server.xml:主配置文件的內容詳解:
web.xml:每個webapp只有“部署”后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置;
context.xml:每個webapp都可以使用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認配置;
tomcat-users.xml:用戶認證的賬號和密碼文件;角色(role),用戶(User);此文件在tomcat啟動時被裝入內存;
catalina.policy:當使用-security選項啟動tomcat時,用于為tomcat設置安全策略;
catalina.properties:Java屬性的定義文件,用于設定類加載器路徑,以及一些與JVM調優相關參數;
logging.properties:日志系統相關的配置;
每一個組件都由一個Java“類”實現,這些組件大體可分為以下幾個類型:
頂級組件:Server
服務類組件:Service
連接器組件:http, https, ajp(apache jserv protocol)
容器類:Engine, Host, Context
被嵌套類:valve, logger, realm, loader, manager, …
集群類組件:listener, cluster, …
webapp歸檔格式:(在實際工作當中,當程序員將成千上萬的jsp格式的文件,要一個個的傳輸過來則非常的慢。所以就需要文件的歸檔)
.war:webapp;? (如果從程序員那里得到的是.war格式的文件,則直接放在主頁面目錄下就可以了,系統會自動展開的)
.jar:EJB的類打包文件(類庫);
.rar:資源適配器類打包文件;
.ear:企業級webapp;
…
管理接口
<Server port=”8005″ shutdown=”SHUTDOWN”>(8005默認監聽在本機的IP地址;SHUTDOWN:可以關閉tomcat)
yum install telnet(安裝包)
telnet 127.0.0.1 8005 ?? (連接本機的8005 端口)
輸入?SHUTDOWN 就可以將本機的tomcat關閉了。為了安全可以將SHUTDOWN改為其他的字符。
連接器及協議:
<Connector port=”8080″ protocol=”HTTP/1.1″ (http的連接器及協議)
connectionTimeout=”20000″? (連接延時時間:單位是毫秒)
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ /> (Java的連接器及協議)
<Engine name=”Catalina” defaultHost=”localhost”> (默認tomcat的主機名稱及默認的IP地址)
(如果創建了多個虛擬tomcat的主機;想要其中的某一個作為默認的主機,可以在此更改)
<Host name=”localhost” appBase=”webapps” ? (主機名和網頁的根目錄)
unpackWARs=”true” autoDeploy=”true”> (本機默認的主機及配置:unpackWARs:是否自動展開war文件;autoDeploy:是否自動部署新添加的應用程序)
部署(deploy)webapp的相關操作:(將應用程序文件和其依賴的類資源都放到主頁面路徑里)
部署有兩種方式:
自動部署:auto deploy
手動部署:
冷部署:把webapp復制到指定的位置,而后才啟動tomcat;
熱部署:在不停止tomcat的前提下進行部署;(支持熱部署)
部署工具:manager、ant腳本、tcd(tomcat client deployer)等
undeploy:拆除(反部署),停止webapp,并從tomcat實例上卸載webapp;
start:啟動處于停止狀態的webapp;
stop:停止webapp,不再向用戶提供服務;其類依然在jvm上;
redeploy:重新
示例:部署一個資源文件:
在/data/test/下創建一個.jsp結尾的文件
vim /data/test/index.jsp
<%@ page language=”java” %>
<%@ page import=”java.util.*” %>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<% out.println(“hello world”);
%>
</body>
</html> ? (Java格式的helloword編程)
然后將此資源目錄test整個復制到/usr/share/tomcat/webapps/文件下就可以了,如果有其他的類文件都將其放進test目錄下就可以了,整個過程是熱部署。不需要將tomcat停止服務
最后訪問http://192.168.60.22/test/(就可以訪問到剛才部署的新的資源文件了)
/usr/share/tomcat/work/Catalina/localhost/test/org/apache/jsp/index_jsp.java 查看此目錄下會生成index_jsp.java此文件;此文件為運行剛才創建的測試文件時,將測試文件轉換為全Java代碼的文件。
里面還會生成一個解碼的類文件index_jsp.class
在實際當中部署會有版本號的,所以要創建軟連接的方式:
首先將test1.1——>test:? ln -sv? test1.1 test
然后又有test1.2的版本需要發布需要將:test1.2——->test? :rm? test (刪除舊的鏈接,建立新的鏈接)
ln -s test1.2 test
test 是個不存在的文件夾只提供軟連接的。
tomcat的兩個管理應用:(圖形化管理界面)
manager ? (管理tomcat主機上的應用資源程序的)
host-manager? (管理多個tomcat虛擬主機)
(注意:不要將這兩個應用開放到互聯網上;因為是管理tomcat虛擬機的)
vim? /etc/tomcat/tomcat-users.xml? (編輯配置文件添加用戶和密碼使其能夠登陸到管理界面上去)
systemctl restart tomcat? (重新開啟tomcat服務)
http://192.168.60.20:8080/manager/ (在瀏覽器上打開管理界面)
可以顯示當前tomcat站點上運行的每個應用程序:并且可以對其操作:( 開啟,重載,暫停等服務)
還可以在上面部署新的應用:
啟用host manager的功能:
vim /etc/tomcat/tomcat-users.xml
http://192.168.60.20:8080/host-manager/(在瀏覽器上打開就可以了)
在此界面下可以修改虛擬主機添加刪除虛擬主機。
實驗:實現多個虛擬主機:
編輯配置配置文件,添加虛擬主機:
vim /etc/tomcat/server.xml
(新添加的兩個虛擬主機的主頁面文件應該放在/data/test/ROOT/下和/data/host/ROOT/下;其他的子url路徑放在/data/test/下和/data/host/下就可以了)
然后再/data/下新建兩個文件夾test和host并在里面再新建ROOT目錄:
mkdir /data/host/ROOT/
mkdir /data/test/ROOT/
然后在每個ROOT/下新建測試的實例程序:
vim index.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color=”red”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
最后測試:由于需要解析 主機名所以只能在centos的圖形界面上去訪問:在centos6上在/etc/hosts文件里將主機名添加進去,大開centos6的瀏覽器去訪問就可以了。
vim? /etc/hosts
192.168.60.20 ? www.a.com? www. b.com
然后在centos6上的圖形界面打開瀏覽器訪問就可以了:www.a.com:8080/www.b.com:8080
或者將tomcat配置文件里的默認主機更改為自己定義的虛擬主機,這樣就可以在外部的瀏覽器上訪問:
http://192.168.60.20:8080/
如果希望每個虛擬主機都有獨立的日志記錄,則需將模板復制到自己的虛擬主機的配置文件下。如下圖:
/var/log/tomcat/a_access_log.2018-07-18.log (在此文件里生成新的虛擬主機的單個的日志了)
Context組件: (相當于apache的別名作用)
示例:
<Context path=”/PATH” docBase=”/PATH/TO/SOMEDIR” reloadable=””/>
上上述虛擬主機配置的基礎上;添加內容
當訪問www.a.com:8080/app時 訪問資源的真實路徑是 /data/hh/ROOT/index.jsp的應用程序。
注意:如果定義別名下的真實路徑下面沒有應用程序的話,會造成tomcat服務起不來(啟后又自動關閉)
實驗:實現用nginx將服務反代到后臺的服務器上去
將所有服務都反代到后臺服務器
1 . 在調度器上的配置:
yum install nginx? (安裝服務)
vim /etc/nginx/conf.d/test.conf (配置代理服務器的配置文件)
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://192.168.60.20:8080;
}
}
nginx ?? (啟動nginx服務)
2 .在后臺服務器上的配置:
yum install tomcat? (安裝包)
yum install java-1.8.0-openjdk-devel(安裝jdk)
systemctl start tomcat ? (啟動服務)
ss -nult? (查看端口號是否開啟)
3 .在測試的機器上:
vim/etc/hosts
192.168.60.4 www.aa.com? (此IP地址為nginx反代服務器的地址)
在此機器上的瀏覽器上打開網頁:www.a.com
如果想實現在本機上訪問在tomcat上新建的虛擬主機:
1 . 在nginx上的 ? (確保能夠解析tomcat的虛擬主機名)
vim? /etc/hosts
192.168.60.20? www.a.com? (此IP為tomcat的主機的IP和虛擬主機名)
vim /etc/nginx/conf.d/test.conf
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://www.a.com:8080;
}
}
最后在測試機的瀏覽器上訪問:www.aa.com 就可以了
實驗:實現tomcat的負載均衡:(使用nginx作為反代服務器)
1 .在nginx服務器上:
yum install nginx ? (安裝服務包)
vim /etc/nginx/nginx.conf
upstream www {
server 192.168.60.20:8080;
server 192.168.60.21:8080;
} ? (添加后端tomcat服務器的IP地址)
vim /etc/nginx/conf.d/test.conf
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://www;
}
} ? (這里沒有指定調度算法。默認的是輪詢的調度算法)重新加載服務
nginx -s reload ? (重新加載配置文件)
nginx 開啟服務
2 . 在后臺兩臺tomcat服務器上:
tomcat1上
yum install java-1.8.0-openjdk tomacat tomcat-docs-webapp tomcat-webapps
cd ? /usr/share/tomcat/webapps/ROOT/
刪除原有的index.jsp的文件
然后新建測試文件
vim insex.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color=”green”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
systemctl start tomcat ? (開啟tomcat服務)
tomcat2上
yum install java-1.8.0-openjdk tomacat tomcat-docs-webapp tomcat-webapps
cd /usr/share/tomcat/webapps/ROOT/
刪除原有的index.jsp的文件
然后新建測試文件
vim insex.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color=”green”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
systemctl start tomcat (開啟tomcat服務)
3 .在瀏覽器上訪問nginx的IP地址:http://192.168.60.4/就可以實現對后臺兩臺nginx的輪詢調度訪問了。
實驗:實現單個主機的調度(使用httpd作反代服務器)
httpd的代理模塊:
proxy_module
proxy_http_module:適配http協議客戶端;
proxy_ajp_module:適配ajp協議客戶端
httpd -M ? (可以查看所支持的模塊列表)
1 ? .在代理服務器上:(使用http協議來實現反代)
yum install httpd
cd /etc/httpd/conf.d/? (進入此文件夾下創建配置文件)
vim http-tomcat.conf
<VirtualHost *:80>
ServerName tc1.magedu.com
ProxyRequests Off ? ? ? ? ? (關閉正向代理)
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted ? ? ? (授權所有客戶端能使用)
</Proxy>
ProxyPass / http:// 192.168.60.20:8080/
<Location />
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd (重啟服務)
2? 在代理服務器上:(使用ajp協議來實現反代)
vim /etc/httpd/conf.d/ajp-tomcat.conf
<VirtualHost *:80>
ServerName web.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / ajp://192.168.60.21:8009/
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd? (重啟服務)
tomcat1和tomcat2 的配置如上面的實驗步驟
在客戶端訪問:httpd的IP地址就可以了。
實現負載均衡向后面多臺住機去調度。
在代理服務器上:(使用http協議來實現反代)
<proxy balancer://web>
BalancerMember http://192.168.60.20:8080
BalancerMember http://192.168.60.21:8080
ProxySet lbmethod=byrequests ? ? ?? (調度算法)
</Proxy>
<VirtualHost *:80>
ServerName tc1.magedu.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://web/
<Location />
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd (重啟服務)
tomcat1和tomcat2 的配置如上面的實驗步驟
在客戶端訪問:httpd的IP地址就可以了。
在代理服務器上:(使用ajp協議來實現反代)
vim ajp-http.conf
<proxy balancer://web>
BalancerMember ajp://192.168.60.20:8009
BalancerMember ajp://192.168.60.21:8009
ProxySet lbmethod=byrequests ? ? ? ? ?? (使用的調度算法)
</Proxy>
<VirtualHost *:80>
ServerName www.a.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://web/
<Location />
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd (重啟服務)
tomcat1和tomcat2 的配置如上面的實驗步驟
在客戶端訪問:httpd的IP地址就可以了。
httpd調度的一些參數設置:
status:(狀態)
D:禁用
S:orker is administratively stopped.
I: 由于系統默認就對后端服務器進行健康性檢測,如果需要忽略檢測,添加此選項就可以了。
H:? 備用主機如果在某臺主機上添加此選項,當所有主機都宕機時才開啟此主機作為備用的。
E;標記為錯誤的模式
N:排干模式
示例:
BalancerMember ajp://192.168.60.20:8009 status=D
httpd的調度算法和權重:
loadfactor:
負載因子,即權重;
BalancerMember ajp://192.168.60.20:8009?loadfactor=2? (不寫默認權重為1)
lbmethod:
調度算法:
byrequests:輪詢的調度算法 ?? (默認的調度算法)
會話粘性的實現方法:
Header add Set-Cookie “ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/” env=BALANCER_ROUTE_CHANGED
啟用管理接口:(將下面的內容添加到配置文件里就可以了)
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
systemctl restart httpd? (重啟服務)
在瀏覽器上訪問:http://172.20.49.2/balancer-manager
查看打開的界面:
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/103104