I currently have Nginx installed via the instructions on the Nginx site:

nginx=stable
sudo su -
add-apt-repository ppa:nginx/$nginx
apt-get update 
apt-get install

I have configured Nginx and it has been running great for a little while. Now, I want to add some custom modules--say, the Upload Progress Module. The instructions for this module say to add --add-module=path/to/nginx_uploadprogress_module to your ./configure command. However, I did not install Nginx from source.

What is the best way to handle this situation? Is it possible to tell APT to compile from source and pass options to ./configure? Can I compile over the existing installation? What about paths--how do I make them match? Or do I have to remove the APT managed version and start over?

  • Did you look for the needed module using apt-cache search? – Khaled Jan 27 '11 at 7:29
  • 1
    nginx solid, it not support dynamic module. – alvosu Jan 31 '11 at 0:12
up vote 54 down vote accepted

Install dpkg-dev:

sudo apt-get install dpkg-dev

Add repository:

sudo add-apt-repository ppa:nginx/stable

Edit /etc/apt/sources.list.d/nginx-stable-lucid.list, add dpkg-src:

deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main
deb-src http://ppa.launchpad.net/nginx/stable/ubuntu lucid main

note: (the previous step may have already been automatically performed on Ubuntu >= 12.04 - also make sure that you change lucid to reflect your version)

Resynchronize the package index files:

sudo apt-get update

Get sources:

apt-get source nginx

Build dependencies:

sudo apt-get build-dep nginx

Edit nginx-0.8.54/debian/rules:

config.status.full: config.env.full config.sub config.guess
...
--add-module=path/to/nginx_uploadprogress_module

Build package:

cd nginx-0.8.54 && dpkg-buildpackage -b

Install packages:

sudo dpkg --install nginx-common_1.2.4-2ubuntu0ppa1~precise_all.deb

sudo dpkg --install nginx-full_1.2.4-2ubuntu0ppa1~precise_amd64.deb
  • 1
    Wonderful, detailed instructions. At the end, while sudo dpkg --install nginx-full_0.8.54-4ppa4~lucid_i386.deb-ing, I'm receiving nginx-full depends on nginx-common (= 0.8.54-4ppa4~lucid); however: Package nginx-common is not installed. However, sudo dpkg --install nginx-common_0.8.54-4ppa4~lucid_all.deb is giving dpkg: error processing nginx-common_0.8.54-4ppa4~lucid_all.deb (--install): trying to overwrite '/usr/share/nginx/www/50x.html', which is also in package nginx 0:0.8.54-4ppa2~lucid. How would you recommend resolving this issue? – Michelle Tilley Jan 29 '11 at 18:44
  • Remove nginx package: apt-get remove nginx – alvosu Jan 29 '11 at 19:11
  • 1
    Hi alvosu, I'm getting this error: dpkg-buildpackage: error: debian/rules build gave error exit status 2. Any idea? – Xavi Colomer Apr 16 '12 at 11:59
  • 4
    @BrandonTilley if you install it this way, you can uninstall it via apt-get/dpkg, and also other packages that you install via apt-get will know that nginx is installed and will not ask you to install it. If you installed it directly from source you won't get this. – Carlos Campderrós Jul 3 '12 at 10:47
  • 2
    If you have error like this "dpkg-buildpackage: warning: Failed to sign .dsc and .changes file", use dpkg-buildpackage -uc -us instead of dpkg-buildpackage -b. Otherwise, .deb files won't be created. – Roman Newaza Mar 28 '13 at 10:34

Since squeeze in Debian and since oneric in Ubuntu, there are some (like headers-more-module I needed) in

apt-get install nginx-extras
  • 3
    Dotdeb provides a nice nginx-extras package: dotdeb.org/instructions – Bergius Dec 13 '12 at 11:00
  • For nginx-plus version, apt-get install nginx-extras works great, too! Thanks – scaryguy Aug 28 '15 at 2:53

Installing Nginx from source is necessary if you want to add extra/(third party module) to it. If installed via source the Nginx can't be used as a service and logrotate doesn't gets setup for Nginx. Follow this method to get it installed with all functionalities which you get from installing via apt-get

Sweet article that can be read here will explain the detailed information on compiling modules into nginx. Basically you need to recompile the nginx each time you want to install a module.

Also similar to this method will also work.

 wget 'http://nginx.org/download/nginx-1.9.3.tar.gz'
 tar -xzvf nginx-1.9.3.tar.gz
 cd nginx-1.9.3/

 # Here we assume you would install you nginx under /opt/nginx/.
 ./configure --prefix=/opt/nginx \
     --add-module=/path/to/headers-more-nginx-module
 make
 make install

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.