パケット情報

[root@WASIHS1 ~]# tcpdump port 80 or port 9080
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
11:43:43.660330 IP 192.168.3.1.42456 > WASIHS1.http: Flags [S], seq 978005094, win 14600, options [mss 1460,sackOK,TS val 57148341 ecr 0,nop,wscale 6], length 0
11:43:43.660393 IP WASIHS1.http > 192.168.3.1.42456: Flags [S.], seq 1480348968, ack 978005095, win 14480, options [mss 1460,sackOK,TS val 44625518 ecr 57148341,no p,wscale 7], length 0
11:43:43.660484 IP 192.168.3.1.42456 > WASIHS1.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 57148341 ecr 44625518], length 0
11:43:43.660545 IP 192.168.3.1.42456 > WASIHS1.http: Flags [P.], seq 1:417, ack 1, win 229, options [nop,nop,TS val 57148342 ecr 44625518], length 416
11:43:43.660597 IP WASIHS1.http > 192.168.3.1.42456: Flags [.], ack 417, win 122, options [nop,nop,TS val 44625518 ecr 57148342], length 0
11:43:43.662753 IP WASIHS1.45135 > WASND1.glrpc: Flags [S], seq 2063752965, win 14600, options [mss 1460,sackOK,TS val 44625520 ecr 0,nop,wscale 7], length 0
11:43:43.662994 IP WASND1.glrpc > WASIHS1.45135: Flags [S.], seq 3938356901, ack 2063752966, win 14480, options [mss 1460,sackOK,TS val 55439648 ecr 44625520,nop,w scale 7], length 0
11:43:43.663038 IP WASIHS1.45135 > WASND1.glrpc: Flags [.], ack 1, win 115, options [nop,nop,TS val 44625520 ecr 55439648], length 0
11:43:43.663395 IP WASIHS1.45135 > WASND1.glrpc: Flags [P.], seq 1:576, ack 1, win 115, options [nop,nop,TS val 44625521 ecr 55439648], length 575
11:43:43.663469 IP WASND1.glrpc > WASIHS1.45135: Flags [.], ack 576, win 123, options [nop,nop,TS val 55439648 ecr 44625521], length 0
11:44:33.665115 IP WASIHS1.45135 > WASND1.glrpc: Flags [F.], seq 576, ack 1, win 115, options [nop,nop,TS val 44675522 ecr 55439648], length 0
11:44:33.676554 IP WASIHS1.http > 192.168.3.1.42456: Flags [P.], seq 1:309, ack 417, win 122, options [nop,nop,TS val 44675534 ecr 57148342], length 308
11:44:33.677094 IP 192.168.3.1.42456 > WASIHS1.http: Flags [.], ack 309, win 245, options [nop,nop,TS val 57198358 ecr 44675534], length 0
11:44:33.684733 IP WASIHS1.http > 192.168.3.1.42456: Flags [F.], seq 309, ack 417, win 122, options [nop,nop,TS val 44675542 ecr 57198358], length 0
11:44:33.685583 IP 192.168.3.1.42456 > WASIHS1.http: Flags [F.], seq 417, ack 310, win 245, options [nop,nop,TS val 57198366 ecr 44675542], length 0
11:44:33.685615 IP WASIHS1.http > 192.168.3.1.42456: Flags [.], ack 418, win 122, options [nop,nop,TS val 44675543 ecr 57198366], length 0
11:44:33.705971 IP WASND1.glrpc > WASIHS1.45135: Flags [.], ack 577, win 123, options [nop,nop,TS val 55489691 ecr 44675522], length 0
11:44:43.673892 IP WASND1.glrpc > WASIHS1.45135: Flags [P.], seq 1:195, ack 577, win 123, options [nop,nop,TS val 55499659 ecr 44675522], length 194
11:44:43.673978 IP WASIHS1.45135 > WASND1.glrpc: Flags [R], seq 2063753542, win 0, length 0

サーブレットでdb2へ接続

ソースコード

 

package qqq;package qqq;
import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;
import javax.naming.Context;import javax.naming.InitialContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;
/** * Servlet implementation class Conn */

public class Conn extends HttpServlet { private static final long serialVersionUID = 1L;            /**     * @see HttpServlet#HttpServlet()     */    public Conn() {        super();        // TODO Auto-generated constructor stub    }
/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); // ContentTypeを設定        response.setContentType("text/html; charset=UTF-8");        // 出力用PrintWriterを取得        PrintWriter out = response.getWriter();        // 出力        out.println("<html>");        out.println("<head>");        out.println("<title>DB2 Connect Sample</title>");        out.println("</head>");        out.println("<body>");        out.println("<table border=\"1\">");        out.println("<tr><td>ID</td><td>DOC</td></tr>");         try {            Context ctx = new InitialContext();            //コネクションプールからデータソースを取得            DataSource ds = (DataSource)ctx.lookup("jjj/jdbc");            Connection con = ds.getConnection();            Statement stmt = con.createStatement();                        //rssテーブルを検索し、結果を表示            ResultSet rs = stmt.executeQuery("select id,name from T1");            while(rs.next()) {                out.println("<tr><td>");                out.println(rs.getString("id"));                out.println("</td><td>");                out.println(rs.getString("name"));                out.println("</td></tr>");            }            rs.close();            stmt.close();            con.close();        } catch (Exception e) {            e.printStackTrace();        }                out.println("</table>");        out.println("</body>");        out.println("</html>");
    }
/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }
}

hostヘッダの検証

Windows側のhostsファイル修正

192.168.2.170 nginx

 

②ngixのconf修正

URLがnginxできたものを後ろのIHSに送る。(81番ポート)

このとき、レスポンスヘッダのhost部分はキープする。(nginxという名前で)

[root@localhost conf.d]# cat server.conf
server {

listen 80;
server_name nginx;

#location /KKK/ {
#proxy_pass http://192.168.3.150:81;
# }

location /snoop {
proxy_pass http://192.168.3.150:81/snoop;
proxy_set_header Host $host;
}

}

 

プラグインの修正

URLがnginxという名前で

ポート番号が81の場合

通信を許可する。

[root@WASIHS1 ~]# cat /opt/IBM/WebSphere/Plugins/config/webserver181/plugin-cfg.xml
<?xml version="1.0" encoding="Shift_JIS"?><!--HTTP server plugin config file for the webserver cell01.WASIHS1-node.webserver181 generated on 2019.05.26 at 01:45:58 AM JST-->
<Config ASDisableNagle="false" AcceptAllContent="true" AppServerPortPreference="WebserverPort" ChunkedResponse="false" FIPSEnable="false" FailoverToNext="false" HTTPMaxHeaders="300" IISDisableFlushFlag="false" IISDisableNagle="false" IISPluginPriority="High" IgnoreDNSFailures="false" KillWebServerStartUpOnParseErr="true" MarkBusyDown="false" OS400ConvertQueryStringToJobCCSID="false" RefreshInterval="60" ResponseChunkSize="64" SSLConsolidate="true" StrictSecurity="true" TrustedProxyEnable="false" VHostMatchingCompat="false">
<Log LogLevel="Error" Name="/opt/IBM/WebSphere/Plugins/logs/webserver181/http_plugin.log"/>
<Property Name="ESIEnable" Value="false"/>
<Property Name="ESIMaxCacheSize" Value="1024"/>
<Property Name="ESIInvalidationMonitor" Value="false"/>
<Property Name="ESIEnableToPassCookies" Value="false"/>
<Property Name="ESICacheidFull" Value="false"/>
<Property Name="PostSizeLimit" Value="-1"/>
<Property Name="PostBufferSize" Value="0"/>
<Property Name="PluginInstallRoot" Value="/opt/IBM/WebSphere/Plugins/"/>
<Property Name="Keyfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver181/plugin-key.kdb"/>
<Property Name="Stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver181/plugin-key.sth"/>
<VirtualHostGroup Name="default_host">
<VirtualHost Name="*:9080"/>
<VirtualHost Name="*:80"/>
<VirtualHost Name="*:9443"/>
<VirtualHost Name="*:5060"/>
<VirtualHost Name="*:5061"/>
<VirtualHost Name="*:443"/>
<VirtualHost Name="wasnd2:9080"/>
<VirtualHost Name="wasnd2:80"/>
<VirtualHost Name="wasnd2:9443"/>
<VirtualHost Name="wasnd2:5060"/>
<VirtualHost Name="wasnd2:5061"/>
<VirtualHost Name="wasnd2:443"/>
<VirtualHost Name="*:9081"/>
</VirtualHostGroup>
<VirtualHostGroup Name="test_host">
<VirtualHost Name="nginx:81"/>
<VirtualHost Name="*:9080"/>
<VirtualHost Name="*:9081"/>
</VirtualHostGroup>
<ServerCluster CloneSeparatorChange="false" GetDWLMTable="true" IgnoreAffinityRequests="false" LoadBalance="Round Robin" Name="cluster" PostBufferSize="0" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60" ServerIOTimeoutRetry="-1">
<Server CloneID="AAAA" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="2" MaxConnections="-1" Name="WASND1Node01_member1" ServerIOTimeout="900" WaitForContinue="false">
<Transport ConnectionTTL="28" Hostname="WASND1" Port="9080" Protocol="http"/>
<Transport ConnectionTTL="28" Hostname="WASND1" Port="9443" Protocol="https">
<Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/webserver181/plugin-key.kdb"/>
<Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver181/plugin-key.sth"/>
</Transport>
</Server>
<Server CloneID="BBBB" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="2" MaxConnections="-1" Name="WASND2Node01_member2" ServerIOTimeout="900" WaitForContinue="false">
<Transport ConnectionTTL="28" Hostname="WASND2" Port="9081" Protocol="http"/>
<Transport ConnectionTTL="28" Hostname="WASND2" Port="9444" Protocol="https">
<Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/webserver181/plugin-key.kdb"/>
<Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver181/plugin-key.sth"/>
</Transport>
</Server>
<PrimaryServers>
<Server Name="WASND1Node01_member1"/>
<Server Name="WASND2Node01_member2"/>
</PrimaryServers>
</ServerCluster>
<UriGroup Name="test_host_cluster_URIs">
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/snoop/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/hello"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/hitcount"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsv"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsw"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/j_security_check"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ibm_security_logout"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/servlet/*"/>
</UriGroup>
<Route ServerCluster="cluster" UriGroup="test_host_cluster_URIs" VirtualHostGroup="test_host"/>
<UriGroup Name="default_host_cluster_URIs">
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/snoop/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/hello"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/hitcount"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsv"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsw"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/j_security_check"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ibm_security_logout"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/servlet/*"/>
</UriGroup>
<Route ServerCluster="cluster" UriGroup="default_host_cluster_URIs" VirtualHostGroup="default_host"/>
<RequestMetrics armEnabled="false" loggingEnabled="false" rmEnabled="false" traceLevel="HOPS">
<filters enable="false" type="URI">
<filterValues enable="false" value="/snoop"/>
<filterValues enable="false" value="/hitcount"/>
</filters>
<filters enable="false" type="SOURCE_IP">
<filterValues enable="false" value="255.255.255.255"/>
<filterValues enable="false" value="254.254.254.254"/>
</filters>
<filters enable="false" type="JMS">
<filterValues enable="false" value="destination=aaa"/>
</filters>
<filters enable="false" type="WEB_SERVICES">
<filterValues enable="false" value="wsdlPort=aaa:op=bbb:nameSpace=ccc"/>
</filters>
</RequestMetrics>
</Config>

 

f:id:kenken0102:20190526173107p:plain

f:id:kenken0102:20190526173111p:plain

f:id:kenken0102:20190526173115p:plain

f:id:kenken0102:20190526173120p:plain

f:id:kenken0102:20190526173126p:plain

f:id:kenken0102:20190526173131p:plain

 

④上記がアクセスできた画面

 

⑤websphere側の設定も変更しております。

 

f:id:kenken0102:20190526173638p:plain

f:id:kenken0102:20190526173638p:plain

 

一応完成!!

 

サーブレット用のセッション生成プログラムコード

他のサイトからもらったソースコード

見事に動作しました。

 

chrome

①クッキー名を保護されていない(または保護されている)通信の部分から確認できます。JSESSIONになっているはず。

 

②その中のコンテンツの部分に「

HttpSessionCloneId

」を確認できます。

 

いったんそれくらいでよいのかな??

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub HttpSession session = request.getSession(true);
int cnt; String msg, id; // セッションIDの取得 id = session.getId();
try { // セッションに格納された値の取得 String cntStr = (String)session.getAttribute("counter"); cnt = Integer.parseInt(cntStr); msg = cnt + " 回目のお越しです!"; } catch (NumberFormatException e) { cnt = 1; msg = "はじめまして!"; } cnt++; // セッションに値を格納 session.setAttribute("counter", Integer.toString(cnt));
// 応答文字コードのセット response.setContentType("text/html; charset=Shift_JIS"); // 出力ストリームの取得 PrintWriter out = response.getWriter(); out.println("<html><head>\n" + "<meta http-equiv=\"content-type\" content=\"text/html; charset=Shift_JIS\" />\n" + "<title>セッション・デモ</title>\n" + "</head><body>\n" + "<h1>セッション・デモ</h1>\n" + "<p>" + msg + "</p>\n" + "<p>サーブレットコンテナが割り振ったセッションID:" + id + "</p>\n" + "</body></html>\n");
}