Accept cookies for analytics, social media, and advertising, or learn more and adjust your preferences. These cookies are on by default for visitors outside the UK and EEA. Privacy Notice.
.warファイルを使ってデプロイすることができません。Nginxがイメージ(.jpg, .png, .gif)、スタイルシート (.css) および JavaScript (.js) のような静的ファイルを見つけて直接送信できるように、Java webアプリケーションフォルダが指定されなければならないため、アプリケーションファイルはフォルダに配備される必要があります。これらのファイルはJavaサーバによって処理される必要がありません - NGINXにその仕事をさせます。
Jettyは一番良いパフォーマンスを持つため、この例のためにJettyを使います。
以下の例では、NGINXはJava サーバの前にあるリバースプロキシとして動作します。
jetty/contexts/YOUR_WEB_APPLICATION_FOLDER.xml
を編集することでwebアプリケーションのコンテキストを設定します。
resourceBase (YOUR_WEB_APPLICATION_FOLDER) と VirtualHost (YOUR_DOMAIN) を正しく設定するように注意してください。
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="configurationClasses">
<Array type="java.lang.String">
<Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.Configuration</Item>
<Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item>
<Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item>
</Array>
</Set>
<Set name="contextPath">/</Set>
<Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/YOUR_WEB_APPLICATION_FOLDER</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>YOUR_DOMAIN</Item>
</Array>
</Set>
<New id="YOUR_DB_NAME" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>jdbc/YOUR_DB_NAME</Arg>
<Arg>
<New class="org.postgresql.ds.PGConnectionPoolDataSource">
<Set name="User">postgres</Set>
<Set name="Password">*****</Set>
<Set name="DatabaseName">YOUR_DB_NAME</Set>
<Set name="ServerName">localhost</Set>
<Set name="PortNumber">5432</Set>
</New>
</Arg>
</New>
</Configure>
root /PATH/TO/YOUR/WEB/APPLICATION;
proxy_pass http://localhost:8080;
location ~ \.do$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ \.jsp$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ^~/servlets/* {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
server {
listen 80;
server_name YOUR_DOMAIN;
root /PATH/TO/YOUR/WEB/APPLICATION;
location / {
index index.jsp;
}
location ~ \.do$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ \.jsp$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ^~/servlets/* {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
Javaと同じサーバ上でNGINXを動作している場合、NGINXだけがアクセスできるようにポート80へのアクセスを拒否するのがベストプラクティスです。Linux上では以下のようにします
/sbin/iptables -A INPUT -p tcp -i eth0 --dport 8080 -j REJECT --reject-with tcp-reset
Jettyを使って1つだけのwebアプリケーションがある場合、localhostからだけJettyが動作するようにホストをlocalhostにバインドすることができます。
つまり、外部アクセスを保護するためにiptablesを設定する必要がありません。
conf/jetty.xml
上で
<Set name="host"><SystemProperty name="jetty.host" default="localhost"/></Set>
あるいは、組み込みのJettyサーバコード上で:
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setHost("localhost"); // bind jetty to run only from localhost
connector.setPort(8080);
server.addConnector(connector);
server.start();
server.join();
参照
NGINX に java ハンドラを埋め込むには、Clojure を調べてください。