Nginx+Tomcat 配置不同二级域名访问 Tomcat 中的对应项目到 Nginx 给网站安装 SSL 证书

本贴最后更新于 2030 天前,其中的信息可能已经时移俗易

1.Tomcat 配置不同二级域名

进入 Tomcat 的安装目录 conf 目录下,找到 server.xml 文件打开,找到 host 节点。复制 host 节点并且编辑里面的内容:

<!--blog.kangaroohy.top-->

<Host name="blog.kangaroohy.top"  appBase="webapps"
		unpackWARs="true" autoDeploy="true">
		<Context path="" docBase="/usr/tomcat/webapps/solo" debug="0"/>
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
		prefix="localhost_access_log" suffix=".txt"
		pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

其中,Host 节点的 name 就是网址,Context 节点的 docBase 就是项目的绝对路径。
有多少项目,就配置多少 Host 节点。通过这种方式,即可在同一个 Tomcat 中部署多个 Webapp。重启服务器,在云服务器安全组添加 8080 端口外网访问规则,即可通过 http://blog.kangaroohy.top:8080 访问项目。接下来再配置 Nginx。

2.Nginx 安装及配置

安装

在 Ubuntu 系统下,直接

$sudo apt-get install nginx

即可安装 Nginx,安装完后,文件结构大致为:

  • 所有的配置文件都在 /etc/nginx 下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available 下
  • 程序文件在 /usr/sbin/nginx
  • 日志放在 /var/log/nginx
  • 并已经在 /etc/init.d/ 下创建了启动脚本 nginx
  • 默认的虚拟主机的目录设置在了 /var/www/nginx-default (有的版本 默认的虚拟主机的目录设置在了 /var/www, 请参考 /etc/nginx/sites-available 里的配置)

配置

在配置 solo 博客的时候,直接用了 solo 官方的配置,先找到 nginx 的配置目录(也可以通过 whereis nginx 命令得知安装目录),也是进入到 /etc/nginx 下的配置文件 nginx.conf 的 http 节点中作如下配置:

upstream blog {
    server localhost:8080; 
}

server {
    listen       80;
    server_name  blog.kangaroohy.top; 

    access_log off;

    location / {
        proxy_pass http://blog$request_uri;
        proxy_set_header  Host $host:$server_port;
        proxy_set_header  X-Real-IP  $remote_addr;
        client_max_body_size  10m;
    }
}

进入 nginx 安装目录 sbin 下,输入命令 ./nginx -t,看到如下显示

nginx.conf syntax is ok  
nginx.conf test is successful  

说明配置文件正确!重启 nginx 后,通过 http://blog.kangaroohy.top 成功访问。
注:

  • 在启动时遇到了 80 端口占用问题,是由于 Nginx 自身占用导致,直接 kill 掉 nginx 再启动就搞定。
ps -ef | grep nginx

从容停止   kill -QUIT 主进程号
快速停止   kill -TERM 主进程号
强制停止   kill -9 nginx

sudo /usr/sbin/nginx
  • 配置完 nginx 后,修改安全组的 8080 端口为 80 端口,同时增加 443 端口,为下边配置 SSL 准备。

3.Nginx 服务器安装 SSL 证书

申请 SSL

由于用的是阿里云,所以直接在阿里云申请的免费 SSL 免费型 DV SSL,系统签发后,下载 Nginx 版本并进行配置。

配置

在 Nginx 的 /etc/nginx 目录下新建 cert 目录,并把下载好的证书上传到该目录下,名字可自定义,与 server 里的名字相同即可。进入到 /etc/nginx 下的配置文件 nginx.conf 的 http 节点中作如下调整:

upstream blog{
	server localhost:8080;
}

server {
	listen 443;
	server_name blog.kangaroohy.top;
	ssl on;
	root html;
	index index.html index.htm;
	ssl_certificate  cert/blog.kangaroohy.top.pem;
	ssl_certificate_key cert/blog.kangaroohy.top.key;
	ssl_session_timeout 5m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;

	location / {
		root html;
		index index.html index.htm;
		proxy_pass http://blog$request_uri;
		proxy_set_header  Host $host:$server_port;
		proxy_set_header  X-Real-IP  $remote_addr;
		client_max_body_size  10m;
	}
}

server{
	listen       80;
	server_name  blog.kangaroohy.top; 
	rewrite ^/(.*)$ https://blog.kangaroohy.top/$1 permanent;
}

再次检查是否配置没问题,然后重启 Nginx,访问 http://blog.kangaroohy.top 自动跳转到 https://blog.kangaroohy.top
注:
在给 solo 配置 SSL 时,还需要把 solo 的 latke.properties 配置文件改改

#### Server ####
# Browser visit protocol
serverScheme=https
serverHost=blog.kangaroohy.top

image.png

成功给 solo 配置 SSL!

  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 442 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • thetbw

    不错,收藏了一会弄

  • thetbw

    出现了一点问题,No 'Access-Control-Allow-Origin' header is present on the requested resource。这个是有些资源不能跨域访问?怎么解决呀
    ps:知道了,latke 的端口配置应该为最终访问的端口

  • thetbw

    浏览器还会提示,你访问的网站并非完全安全是为什么呀,因为证书的原因?

    1 回复
  • kangaroo1122

    你用的啥证书,或者重启一下试试

  • someone

    挺好的,我也要试试