在注重網路安全的這個年代
免不了的會需要 SSL 加密來做傳輸
而在我們架設的 Nginx Server 中,預設是不開啟 SSL 模式的
在此次文章中分為兩個階段
一為單獨啟動 Nginx 的 SSL
二為透過 Nginx SSL 內轉 Tomcat 上的專案
我們知道要走 SSL 必要的就是需要金鑰(key)和證書(certificate)
所以先把 key 和 certificate 建立出來吧
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
新增 443 port 的監聽事件
sudo vi /etc/nginx/sites-available/ssl
server {
listen 443 ssl;
ssl on;
root /var/www;
index index.html index.htm index.php index.jsp;
server_name localhost;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
}
完成後作 soft link ,這邊注意:Nginx真正吃 server 監聽事件的是在 sites-enabled
所以我們將我們寫好的部份作連結過去
sudo ln -s /etc/nginx/sites-available/ssl /etc/nginx/sites-enabled/ssl
如此一來,基本的 Nginx SSL 就完成了
可以透過 https 來讀取 /var/www 底下的 html 網站了
當然!如果要可以讀取 php 或 jsp 等等的其他網站 必須也在 ssl 中設定
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
詳細可看我的 Nginx 上一篇文章 傳送門
透過 Nginx SSL 執行 Tomcat 專案
還記得上一次,Nginx 內轉 Tomcat 的狀況嗎
假設如果我們想透過 Nginx 來讀取 Tomcat manager 的頁面
一般情況在 80 port 的監聽事件中是這樣寫的
location /manager/ {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_pass_request_headers on;
proxy_set_header X-Forwarded-Proto $scheme;
include proxy_params;
}
恩.......好吧 其實在 443 port 的監聽其實也是這樣寫
但我們在 tomcat 的 server.xml 需要在 Host 中增加一些參數,如下
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
注意
這邊請注意一件事情
有些人可能有透過 Tomcat 直接跑 SSL
他是跑在 8443 port,而我們透過 Nginx 是完全吃 Nginx 的 SSL
所以 Tomcat 本身是不跑 SSL 的,這邊切記
但是為了安全需求,既然 Tomcat 本身不跑 SSL 那我們就得避免他人直接存取 8080 port
所以可能還得配合一些 tools 來阻擋 port 如 iptables 或是 ufw
參考
http://webapp.org.ua/sysadmin/setting-up-nginx-ssl-reverse-proxy-for-tomcat/https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-nginx-for-ubuntu-14-04
http://www.jb51.net/os/Ubuntu/72112.html
http://han.guokai.blog.163.com/blog/static/136718271201211631456811/
沒有留言:
張貼留言