最近在弄小程序,而小程序网络请求所需要的链接需要https安全链接,之前胡乱配置一番可以用了,不过并不太理解。
后来又需要一个php项目,各处查看了一下,需要apache服务器,而我的只有一个域名,已经给了tomcat了,如果在域名后面加端口号又显得太蠢,但总不可能在申请一个域名吧?思来想去,只能配置转发了。
(这里更正一下,其实并不是域名问题,而是我只有一个服务器,所以就打算弄集群了,后来我才知道可以申请二级域名来着)
如果是新解压的tomcat,并不需要配置什么,主要都是在apache上。
我所使用的是apache2.4,证书使用的是letsencrypt-win-simple.v1.9.8.2生成的证书。
在Apache24/conf/httpd.conf文件修改:
找到
LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Include conf/extra/httpd-ssl.conf
并去掉前面的#就行
这里说一下,在apache里面自动配有ssl凭证了,就是
Include conf/extra/httpd-ahssl.conf
在它里面有一行 Listen 443 https,这是开启443端口的监听,如果你不需要ahssl配置,可以把Include conf/extra/httpd-ahssl.conf屏蔽掉,并且在httpd-ssl.conf文件里加上Listen 443 https
(由于使用的apache自带凭证,会提示您的连接不是私密连接,所以还是使用自己的凭证吧)
在httpd.conf文件的最末尾加上
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteLog logs/rewrite.log
RewriteLogLevel 10
这是http转https的,如果有碰到RewriteLog和RewriteLogLevel报错,就把这两个屏蔽掉(这是输出日志,暂且还没去找解决办法,主要是不怎么用到)
接下来是Apache24/conf/extra/httpd-ssl.conf文件:
在上面Include conf/extra/httpd-ssl.conf就是引用这个文件
贴上我的配置
<VirtualHost _default_:443>
SSLEngine on
ServerName localhost:443 #对应httpd.conf里的ServerName
ServerAlias www.example.com www.xxx.com #可以配置多个域名,这里我不需要
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
SSLCertificateFile "${SRVROOT}/conf/ssl/www.example.com-crt.pem" #证书文件地址
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/www.example.com-key.pem" #证书密钥地址
#我把这两个文件复制进apache/conf/ssl文件夹下,如果在其他文件夹,可以写绝对路径
DocumentRoot "${SRVROOT}/htdocs" #项目路径,如果只是转发,可以不需要
CustomLog "${SRVROOT}/logs/ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
<Directory "${SRVROOT}/htdocs">
Options Indexes Includes FollowSymLinks
AllowOverride AuthConfig Limit FileInfo
Require all granted
</Directory>
ProxyPass / http://localhost:8080/ 转发配置
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
上面我的配置按着简单来配的,暂时没发现其他问题。
说明一下ProxyPass和ProxyPassReverse,配置格式为:
ProxyPass /项目名 http://tomcat项目路径:tomcat端口号/url
ProxyPassReverse /项目名 http://tomcat项目路径:tomcat端口号/url
比如配置为:/example http://localhost:8080/example
表示的是当我输入域名www.example.com的时候,访问的是apache目录下的htdocs里面的项目
而当我输入www.example.com/example的时候,访问的才是tomcat下的example项目
由于我在tomcat/conf/server.xml配置了默认访问项目,并且需要直接使用域名就可以访问example项目,所以直接以/表示tomcat的根目录,并且不需要url,url可以表示项目,也可以是某一链接
最后在说一下,记得打开防火墙,把80端口和443端口开放,否则无法使用域名直接访问。
右下角->打开网路和共享中心->windows网络防火墙->高级设置->入站规则->新建规则
在打开的窗口里选择->端口->TCP:特定本地端口:(填80或者443)->允许链接->命名
由于个人技术水平有限,如有什么不对的地方,欢迎指正。