e9641b1240
Quoting from https://www.nginx.com/blog/nginx-1-12-1-13-released/ We generally recommend using the mainline branch. This is where we commit all new features, performance improvements, and enhancements. We actively test and QA the mainline branch, so it’s arguably more stable than the “stable” branch. The mainline branch is also the source of NGINX Plus builds for our commercial customers.
199 lines
6 KiB
Ruby
199 lines
6 KiB
Ruby
class Nginx < Formula
|
|
desc "HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server"
|
|
homepage "https://nginx.org/"
|
|
# Use "mainline" releases only (odd minor version number), not "stable"
|
|
# See https://www.nginx.com/blog/nginx-1-12-1-13-released/ for why
|
|
url "https://nginx.org/download/nginx-1.13.12.tar.gz"
|
|
sha256 "fb92f5602cdb8d3ab1ad47dbeca151b185d62eedb67d347bbe9d79c1438c85de"
|
|
head "https://hg.nginx.org/nginx/", :using => :hg
|
|
|
|
bottle do
|
|
sha256 "f00ac0a380462607107e7969d07984e6b8c0c71086200e150cbd7184fac40bc3" => :high_sierra
|
|
sha256 "985bcaa01f621f1872a8becb352fd405d0ae1a394d0188c46af5cbb00dc7872e" => :sierra
|
|
sha256 "3a31e1d75973c69df73bfad8060e1edb4c06a3c78d62d3aad7e3580cc0521d00" => :el_capitan
|
|
end
|
|
|
|
option "with-passenger", "Compile with support for Phusion Passenger module"
|
|
|
|
depends_on "openssl" # don't switch to 1.1 until passenger is switched, too
|
|
depends_on "pcre"
|
|
depends_on "passenger" => :optional
|
|
|
|
def install
|
|
# Changes default port to 8080
|
|
inreplace "conf/nginx.conf" do |s|
|
|
s.gsub! "listen 80;", "listen 8080;"
|
|
s.gsub! " #}\n\n}", " #}\n include servers/*;\n}"
|
|
end
|
|
|
|
openssl = Formula["openssl"]
|
|
pcre = Formula["pcre"]
|
|
|
|
cc_opt = "-I#{pcre.opt_include} -I#{openssl.opt_include}"
|
|
ld_opt = "-L#{pcre.opt_lib} -L#{openssl.opt_lib}"
|
|
|
|
args = %W[
|
|
--prefix=#{prefix}
|
|
--sbin-path=#{bin}/nginx
|
|
--with-cc-opt=#{cc_opt}
|
|
--with-ld-opt=#{ld_opt}
|
|
--conf-path=#{etc}/nginx/nginx.conf
|
|
--pid-path=#{var}/run/nginx.pid
|
|
--lock-path=#{var}/run/nginx.lock
|
|
--http-client-body-temp-path=#{var}/run/nginx/client_body_temp
|
|
--http-proxy-temp-path=#{var}/run/nginx/proxy_temp
|
|
--http-fastcgi-temp-path=#{var}/run/nginx/fastcgi_temp
|
|
--http-uwsgi-temp-path=#{var}/run/nginx/uwsgi_temp
|
|
--http-scgi-temp-path=#{var}/run/nginx/scgi_temp
|
|
--http-log-path=#{var}/log/nginx/access.log
|
|
--error-log-path=#{var}/log/nginx/error.log
|
|
--with-debug
|
|
--with-http_addition_module
|
|
--with-http_auth_request_module
|
|
--with-http_dav_module
|
|
--with-http_degradation_module
|
|
--with-http_flv_module
|
|
--with-http_gunzip_module
|
|
--with-http_gzip_static_module
|
|
--with-http_mp4_module
|
|
--with-http_random_index_module
|
|
--with-http_realip_module
|
|
--with-http_secure_link_module
|
|
--with-http_slice_module
|
|
--with-http_ssl_module
|
|
--with-http_stub_status_module
|
|
--with-http_sub_module
|
|
--with-http_v2_module
|
|
--with-ipv6
|
|
--with-mail
|
|
--with-mail_ssl_module
|
|
--with-pcre
|
|
--with-pcre-jit
|
|
--with-stream
|
|
--with-stream_realip_module
|
|
--with-stream_ssl_module
|
|
--with-stream_ssl_preread_module
|
|
]
|
|
|
|
if build.with? "passenger"
|
|
nginx_ext = `#{Formula["passenger"].opt_bin}/passenger-config --nginx-addon-dir`.chomp
|
|
args << "--add-module=#{nginx_ext}"
|
|
end
|
|
|
|
if build.head?
|
|
system "./auto/configure", *args
|
|
else
|
|
system "./configure", *args
|
|
end
|
|
|
|
system "make", "install"
|
|
if build.head?
|
|
man8.install "docs/man/nginx.8"
|
|
else
|
|
man8.install "man/nginx.8"
|
|
end
|
|
end
|
|
|
|
def post_install
|
|
(etc/"nginx/servers").mkpath
|
|
(var/"run/nginx").mkpath
|
|
|
|
# nginx's docroot is #{prefix}/html, this isn't useful, so we symlink it
|
|
# to #{HOMEBREW_PREFIX}/var/www. The reason we symlink instead of patching
|
|
# is so the user can redirect it easily to something else if they choose.
|
|
html = prefix/"html"
|
|
dst = var/"www"
|
|
|
|
if dst.exist?
|
|
html.rmtree
|
|
dst.mkpath
|
|
else
|
|
dst.dirname.mkpath
|
|
html.rename(dst)
|
|
end
|
|
|
|
prefix.install_symlink dst => "html"
|
|
|
|
# for most of this formula's life the binary has been placed in sbin
|
|
# and Homebrew used to suggest the user copy the plist for nginx to their
|
|
# ~/Library/LaunchAgents directory. So we need to have a symlink there
|
|
# for such cases
|
|
if rack.subdirs.any? { |d| d.join("sbin").directory? }
|
|
sbin.install_symlink bin/"nginx"
|
|
end
|
|
end
|
|
|
|
def passenger_caveats; <<~EOS
|
|
To activate Phusion Passenger, add this to #{etc}/nginx/nginx.conf, inside the 'http' context:
|
|
passenger_root #{Formula["passenger"].opt_libexec}/src/ruby_supportlib/phusion_passenger/locations.ini;
|
|
passenger_ruby /usr/bin/ruby;
|
|
EOS
|
|
end
|
|
|
|
def caveats
|
|
s = <<~EOS
|
|
Docroot is: #{var}/www
|
|
|
|
The default port has been set in #{etc}/nginx/nginx.conf to 8080 so that
|
|
nginx can run without sudo.
|
|
|
|
nginx will load all files in #{etc}/nginx/servers/.
|
|
EOS
|
|
s << "\n" << passenger_caveats if build.with? "passenger"
|
|
s
|
|
end
|
|
|
|
plist_options :manual => "nginx"
|
|
|
|
def plist; <<~EOS
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key>
|
|
<string>#{plist_name}</string>
|
|
<key>RunAtLoad</key>
|
|
<true/>
|
|
<key>KeepAlive</key>
|
|
<false/>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>#{opt_bin}/nginx</string>
|
|
<string>-g</string>
|
|
<string>daemon off;</string>
|
|
</array>
|
|
<key>WorkingDirectory</key>
|
|
<string>#{HOMEBREW_PREFIX}</string>
|
|
</dict>
|
|
</plist>
|
|
EOS
|
|
end
|
|
|
|
test do
|
|
(testpath/"nginx.conf").write <<~EOS
|
|
worker_processes 4;
|
|
error_log #{testpath}/error.log;
|
|
pid #{testpath}/nginx.pid;
|
|
|
|
events {
|
|
worker_connections 1024;
|
|
}
|
|
|
|
http {
|
|
client_body_temp_path #{testpath}/client_body_temp;
|
|
fastcgi_temp_path #{testpath}/fastcgi_temp;
|
|
proxy_temp_path #{testpath}/proxy_temp;
|
|
scgi_temp_path #{testpath}/scgi_temp;
|
|
uwsgi_temp_path #{testpath}/uwsgi_temp;
|
|
|
|
server {
|
|
listen 8080;
|
|
root #{testpath};
|
|
access_log #{testpath}/access.log;
|
|
error_log #{testpath}/error.log;
|
|
}
|
|
}
|
|
EOS
|
|
system bin/"nginx", "-t", "-c", testpath/"nginx.conf"
|
|
end
|
|
end
|