47

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?

2
  • Did you look for the needed module using apt-cache search?
    – Khaled
    Jan 27, 2011 at 7:29
  • 1
    nginx solid, it not support dynamic module.
    – alvosu
    Jan 31, 2011 at 0:12

4 Answers 4

60

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
8
  • 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? Jan 29, 2011 at 18:44
  • Remove nginx package: apt-get remove nginx
    – alvosu
    Jan 29, 2011 at 19:11
  • 2
    Hi alvosu, I'm getting this error: dpkg-buildpackage: error: debian/rules build gave error exit status 2. Any idea? Apr 16, 2012 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. Jul 3, 2012 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. Mar 28, 2013 at 10:34
40

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

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

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

0

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 agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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