У меня есть настройки как так:
Интернет - роутер - [DMZ] - pfsense - вебсервер
router =
jenky plastic cheap-o router (умер мой хороший микротик /routerboard). IP-адрес pfsense установлен в DMZ.
pfsense =
базовый межсетевой экран плюс прокси / обратный прокси. Прокси-серверы предназначены для пересылки URL-адресов на правильный веб-сервер за брандмауэром.
webserver =
centos box с httpd (apache) и tomcat6 (устанавливается отдельно, как от yum, но в разное время, так что это не apache+tomcat).
Несколько веб-сайтов запускаются с этого конкретного веб-сервера и обрабатываются виртуальными хостами Apache.
ex: http://www.somesite.com, http://www.mysite.com, etc
Tomcat запускает приложение на порту 8080 в расширении /mywebapp.
ex: http://www.somesite.com:8080/mywebapp
Я настроил все соответствующим образом в pfsense
для пересылки всех поддоменов веб-сайтов, обслуживаемых apache, на правильный хост.
Я настроил /etc/httpd/conf/httpd.conf для включения конфигурации виртуального хоста как
<VirtualHost *:80>
ServerName mywebapp.somesite.com
ProxyPass / http://www.somesite.com:8080/mywebapp
ProxyPassReverse / http://www.somesite.com:8080/mywebapp
ProxyRequests Off
<Proxy http://www.somesite.com:8080/mywebapp*>
Order deny,allow
Allow from all
</Proxy>
ErrorLog logs/mywebapp.somesite.com-error_log
CustomLog logs/mywebapp.somesite.com-access_log common
</VirtualHost>
Я изменил свой файл tomcat6 server.xml
и изменил первый соединитель, включив в него proxyName
и proxyPort
.
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
proxyName="mywebapp.somesite.com"
proxyPort="8080"
redirectPort="8443" URIEncoding="UTF-8"/>
Независимо от того, что я пытаюсь сделать, когда я помещаю mywebapp.somesite.com
в свой браузер, он перенаправляется на mywebapp.somesite.com:8080/mywebapp
.
когда я хочу получить доступ к нему как mywebapp.somesite.com
и оставить его в адресной строке браузера. Это сделало бы размещение ссылок намного более дружелюбным и т.д.
Я уже настроил CNAME
в DNS
для mywebapp
.
www.somesite.com
не влияет на это.
логи для httpd
выглядят нормально ... логи для tomcat6 ничего не показывают. Я знаю, что запрос попадает в нужное поле, потому что www.somesite.com:8080/mywebapp
работает (наряду с другими сайтами).
iptables
отключен и так, если SELinux
.
Что я делаю неправильно? Пожалуйста, порекомендуйте.
UPDATE:
я попытался добавить ProxyPreserveHost On
в конфигурации vhost для одного из комментариев, но без кубиков. Когда эта строка добавлена, а apache и tomcat перезапущены, я не могу попасть ни на mywebapp.somesite.com
ни на www.somesite.com:8080/mywebapp
. В основном добавление этой конфигурации делает mywebapp вообще недоступным, однако я знаю, что он все еще работает.
UPDATE 2:
Добавление tcpdump, взятого с сервера. Я показываю первое соединение, так как оно передается от pfsense
(прокси) к webserver
серверу.
192.168.0.1 == pfsense
192.168.1.1 == webserver
192.168.2.1 == "internet"
192.168.0.1 > 192.168.1.1
GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
Host: mywebapp.somesite.com
DNT: 1
Via: 1.1 proxy.somecompany.com (squid/3.1.20)
X-Forwarded-For: 192.168.2.1
Cache-Control: max-age=259200
192.168.1.1 > 192.168.2.1
GET /mywebapp HTTP/1.1
Host: www.somesite.com:8080
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
DNT: 1
Via: 1.1 proxy.somecompany.com (squid/3.1.20)
X-Forwarded-For: 192.168.2.1, 192.168.0.1
Cache-Control: max-age=259200
X-Forwarded-Host: mywebapp.somesite.com
X-Forwarded-Server: mywebapp.somesite.com
Connection: Keep-Alive
192.168.2.1 > 192.168.1.1
GET /mywebapp HTTP/1.1
Host: www.somesite.com:8080
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
DNT: 1
Via: 1.1 proxy.somecompany.com (squid/3.1.20)
X-Forwarded-For: 192.168.2.1, 192.168.0.1
Cache-Control: max-age=259200
X-Forwarded-Host: mywebapp.somesite.com
X-Forwarded-Server: mywebapp.somesite.com
Connection: Keep-Alive
192.168.1.1 > 192.168.2.1
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location: http://mywebapp.somesite.com:8080/mywebapp/
Content-Length: 0
Date: Thu, 04 Apr 2013 05:14:44 GMT
192.168.2.1 > 192.168.1.1
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location: http://mywebapp.somesite.com:8080/mywebapp/
Content-Length: 0
Date: Thu, 04 Apr 2013 05:14:44 GMT
192.168.1.1 > 192.168.0.1
HTTP/1.1 302 Moved Temporarily
Date: Thu, 04 Apr 2013 05:14:44 GMT
Server: Apache-Coyote/1.1
Location: http://mywebapp.somesite.com:8080/mywebapp/
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8
192.168.2.1 > 192.168.1.1
GET /mywebapp/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
DNT: 1
Connection: Keep-Alive
Host: mywebapp.somesite.com:8080
192.168.1.1 > 192.168.2.1
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Encoding: gzip
Expires: 0
Cache-Control: no-cache,must-revalidate
X-App-Theme: default
Set-Cookie: JSESSIONID=81CE83D61454A8E75C222759FA118338; Path=/mywebapp
X-App: 1.395
X-App2: 1.508
X-App2-Session: e797c95b
X-App-CLI-Port: 36143
X-App2-CLI-Port: 36143
X-App2-CLI2-Port: 36143
X-Instance-Identity: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjEfz8W2LiYRfrJQYH35uwtgQBpy0g6bTvBaTuARRpVLUmi+lnEfD/nVJY4GJoSfGzgnJAQ3MSqX+e1F4y2Jg5hwa2L0jibpb//BbfIMZkYZk8CtLMrkGvLC1nB7sghXupWOUOhWnzFq+a+LHSANNqfaMs9k6xJI6rvwIDAQAB
Content-Type: text/html;charset=UTF-8
Content-Length: 3879
Date: Thu, 04 Apr 2013 05:14:44 GMT
192.168.2.1 > 192.168.1.1
GET /mywebapp/static/e797c95b/css/style.css HTTP/1.1
Accept: text/css
Referer: http://mywebapp.somesite.com:8080/mywebapp/
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
Host: mywebapp.somesite.com:8080
DNT: 1
Connection: Keep-Alive
Cookie: JSESSIONID=81CE83D61454A8E75C222759FA118338
192.168.1.1 > 192.168.2.1
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Last-Modified: Mon, 25 Mar 2013 20:17:34 GMT
Expires: Fri, 04 Apr 2014 05:14:44 GMT
Accept-Ranges: bytes
Content-Encoding: gzip
Content-Type: text/css
Content-Length: 5763
Date: Thu, 04 Apr 2013 05:14:44 GMT
192.168.2.1 > 192.168.1.1
GET /mywebapp/static/e797c95b/css/color.css HTTP/1.1
Accept: text/css
Referer: http://mywebapp.somesite.com:8080/mywebapp/
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
Host: mywebapp.somesite.com:8080
DNT: 1
Connection: Keep-Alive
Cookie: JSESSIONID=81CE83D61454A8E75C222759FA118338
Я грубо интерпретирую это как:
browser (internet) --> request hits router --> passes DMZ --> hits pfsense...
pfsense > webserver: Uh, here's this HTTP request... for a mywebapp.somesite.com? Do we know a mywebapp.somesite.com?
webserver > internet: Sup, I heard you were looking for some HTTP? I've got some mywebapp.somesite.com.
internet > webserver: Ya, I head about you. Gimme somea dat mywebapp.somesite.com.
webserver > internet: Ha, just kidding, man. I've really got some mywebapp.somesite.com:8080/mywebapp, you dig?
internet > webserver: WTF? Are you serious!?
webserver > pfsense: Dude, I told you we needed more mywebapp.somesite.com, this guy's pissed!
internet > webserver: Hmm... OK, just give me what ya got of mywebapp.somesite.com:8080/mywebapp. I dig.
webserver > internet: Phew! If you dig, I dig... you dig? Here's some HTTP.
internet > webserver: Ah ya, now we're talking. Gimme some more of that /mywebapp/static/.../style.css from Referer: http://mywebapp.somesite.com:8080/mywebapp
webserver > internet: Take it in my man, take it all in. It's all OK.
internet > webserver: Alright, gimme some more of that /mywebapp/static/.../color.css from Referer: http://mywebapp.somesite.com:8080/mywebapp
etc, etc, etc...