这是我的问题here的后续跟进。我已经设置了一个家庭服务器(只是我的其他笔记本电脑运行ubuntu和nginx),我想提供clojure文件。
我正在帮助理解这个过程是如何运作的。对不起,我很困惑,我想我需要重新开始。我问了一个新问题,因为我想使用nginx
而不是lein ring server
,正如该问题的答案所示。
首先,我与leiningen一起开始了一个项目guestbook
,然后我跑了lein ring server
,我在localhost:3000
看到了“Hello World”。据我所知,这与nginx无关!
nginx如何进入此过程?起初我试图用nginx创建一个代理服务器,但也有效,但我不知道如何使用该设置提供clojure文件。
这是我在this answer改编的nginx.conf文件中所拥有的:
upstream ring {
server 127.0.0.1:3000 fail_timeout=0;
}
server {
root /home/a/guestbook/resources/public;
# make site accessible from http://localhost
server_name localhost;
location / {
# first attempt to serve request as file
try_files $uri $uri/ @ring;
}
location @ring {
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_pass http://ring;
}
location ~ ^(assets|images|javascript|stylesheets|system)/ {
expires max;
add_header Cache-Control public;
}
}
所以我想使用我的域example.com
(不是localhost);我该怎么做呢?
修改
根据@noisesmith's comment,我会选择使用lein uberjar选项。正如here所解释的那样,创建一个很容易:
$ lein uberjar
Unpacking clojure-1.1.0-alpha-20091113.120145-2.jar
Unpacking clojure-contrib-1.0-20091114.050149-13.jar
Compiling helloworld
[jar] Building jar: helloworld.jar
$ java -jar helloworld.jar
Hello world!
您是否也可以直接向我提供有关如何将此uberjar与nginx一起使用的正确文档?
答案 0 :(得分:11)
请尝试Nginx-Clojure module。您可以在没有任何Java Web服务器的情况下使用Nginx运行clojure Ring处理程序,例如。码头。
答案 1 :(得分:7)
对于初学者,不要使用lein
来处理生产中的事情。您可以使用lein uberjar
创建一个jar文件,其中所有deps都可以运行,并java -jar
从生成的jar中运行应用程序。还可以选择运行lein ring uberwar
来创建一个在tomcat中运行的war存档,它提供了一些其他的便利(比如日志轮换以及在大多数Linux系统上与/etc/init.d作为服务集成等) )。
nginx
位于您的应用前面,位于端口80.它将通过代理您的应用来提供内容。这很有用,因为nginx具有许多功能(especially regarding security),您无需在自己的应用程序中实现这些功能,包括与https和selinux集成的可选集成。在应用程序前面使用nginx也可以防止您需要以root身份运行java(通常只有root用户可以使用端口80)。此外,您可以让nginx直接提供静态资源,而不必通过您的应用程序提供服务。