Recompile Nginx with additional modules - nginx

I installed Nginx via apt-get on Debian a while ago, and I've got a couple of sites live on it. Now I need to install some additional modules, and as I don't want to mess anything up I'd like to double check my process before I perform it. Hopefully this will also help others that are unsure about this part.
As I've understood it I have to do the following to minimize the downtime:
Download the source for Nginx
Add the additional modules with ./configure --additional-module
Compile Nginx with make
Stop the current server (service nginx stop)
Install Nginx with make install
Start the new server (service nginx start)
Or do I have to uninstall Nginx first, as it's not compiled from source at this point?

Having done something similar on Ubuntu before, the installation should overwrite the existing nginx binaries with the newly compiled ones, so long as yes, you ensure nginx isn't running on the system at the time.
I'd recommend trying to install nginx elsewhere on the system, so in case you can't get it to work quickly, you can restart your web server with the old nginx binaries and not have significant downtime.

nginx -V - helpful command which shows options for .\configure which was used to make nginx, which is actually working.
Helpful to get detail imagination about.
apt-get source nginx - to get source
install will automatically substitute actual installed version by new one
Keep also in mind that some nginx-modules can require additional libs on server. geoip module is classical example of it

Related

Does make/gmake include all the libraries after built?

I was building the openresty Nginx on machine A and want to use it on machine B. Is it necessary to install all the rpm/dependencies on machine B?
The building process on machine A is like:
yum install multiple-devel commands
git clone multiple repositories
wget openresty.tar.gz
untar openresty, cd openresty and ./configure --...
gmake
gmake install
When I tried to understand the relationships between configure, make and make install, I found https://stackoverflow.com/a/54628708/11887927 but still not quite get it.
If it's still required to install all the rpm&dependencies, what's the benefit of building on my own or I'm totally wrong about the make process?
Maybe I didn't make myself clear enough. Thanks for anyone stopping by.
Machine B doesn't require rpm/dependencies but needs libraries built on machine A
Here is how it works:
copy Nginx binary/configurations to B
copy libraries(including folders, openresty in my case) to B
echo libraries to /etc/ld.so.conf.d, /etc/ld.so.conf.d/luajit.conf in my case

Installation issues with openresty

My machine has Mac os. In this I have nginx 1.6.x. I initially installed with Homebrew.
I am trying to run a project which in production uses openresty (as it has lua 3rd party modules)
My confusion is regarding which one to install.
Do I need to completely remove nginx and install openresty, as it's documentation says it's a bundle of components,i.e. it will contain nginx?
or
Install new version of nginx with lua 3rd party modules and then install openresty too.
Sorry if there is a or too many typo in my question.
A good link will be helpful as I think I have confused myself enough.
Thanks in Advance.
Openresty is nginx bundled with lua and other 3rd party modules, so having both of them installed on your computer may lead to trouble, for example:
This case can happen if you try to run both of them at the same time: Your nginx conf file can have a server block listening to a port while your openresty also have a server block listening to that block. If nginx is already running, openresty won't be able to run, since the port is already bound.
I installed openresty with a previous installation of nginx and ran into some problems, so i would advise you to save relevant configuration and data from your nginx instalation and removing it.
Installing openresty seems better since besides installing nginx, it will install lua modules and a few more as it is listed on their github.https://github.com/openresty/lua-nginx-module
I don't know how your project is going, but i would suggest moving using openresty, since it will save potential trouble.

How to configure additional modules to nginx after installation?

I have installed Nginx in our redhat machine using rpm. Now we want to add nginx-rtmp module, but inorder to add new module as per the document i need to build it by downloading the tar ball. Does it mean that i have to remove the rpm and install it as per the document.
Ref: https://github.com/arut/nginx-rtmp-module/wiki/Getting-started-with-nginx-rtmp
./configure --add-module=/usr/build/nginx-rtmp-module
make
make install
With nginx 1.9.11, it's not necessary to recompile the server, as they added support for dynamic modules. Take a look here:
https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/
Unlike Apache, all modules, including the 3rd party modules, are going to be compiled into nginx. So every time you want to add a new module, you have to recompile nginx.
So yes, you have to install it as per the document. There is no much value of keeping 2 nginx runtimes on the same server any way. So you may also want to remove the previous nginx.
I had a similar problem where the auth-pam module broke after an upgrade. Here's what fixed it for me (debian stretch/sid, nginx 1.10.2):
apt install libnginx-mod-http-auth-pam
ln -s /usr/share/nginx/modules-available/mod-http-auth-pam.conf /etc/nginx/modules-enabled/50-mod-http-auth-pam.conf
The config file contains a single “load_module” directive which tells nginx to dynamically load the module on startup. As jekennedy mentioned, this would only apply to newer versions of nginx that support dynamic module loading.
Yes, you have to uninstall nginx (installed via rpm) and re-install it according to the mentioned document that is from source file. There are some disadvantages of installing nginx using source, like you cannot use nginx as a service. Here, you can find instructions to do same thing with all the functionalities you get while installing nginx using OS-respective packages.
Following the steps in this post from the nginx blog page called "Compilation of Dynamic Modules for NGINX Plus", i could compiled the RTMP módule, downloading the nginx-rtmp-module from Github and import it on my webserver.
Regards.

Install PHP Extensions Without Rebuild

I've got a VPS setup with Nginx & PHP5-FPM.
Being fairly new to unix, VPS etc... it took me ages to get the setup I wanted.
However Now I want to be able to install some extensions onto PHP without haveing to rebuild the entire thing. For example. Is there a way to install the php_tidy extension on an existing PHP setup?
You can compile an extensions as a shared library. Then you just have to declare your module in the php.ini.
There is a description at php.net for phpize.
Performance differences between a module and a full compilation are discussed here.
Check out the documentation at http://pecl.php.net/ on how to install PHP extensions.
It's usually as easy as running a command such as
pecl install tidy

Forbidden message when serving a sinatra local site using nginx passenger

I've followed the instructions for installing phusion passenger with nginx in ubuntu. I had some issues while installing since I use rvm and I had to install as root and the installer was failing to find rake so i temporarily chmoded /opt to be owned by my user and after installation I resetted ownership to root. I can see nginx welcome page but when I try to visit a sinatra app I get forbidden, the virtual host is pointed to the sinatra app public dir and the permissions for the whole app are 777.
Try Passenger 3. It automatically detects most permission problems and tells you how to fix them.
If this is for a production system, you really don't need the flexibility of RVM as you should be using a single stable version of Ruby and Rails for Phusion. Install the version you need, using Aptitude if that version is available, and be done with it.
Because this is the page that Google brought me to for my issue, which isn't a Passenger issue, but a Nginx reverse-proxy issue, you need to add the line
disable :protection
somewhere in your sinatra app. I have mine at the very end, outside any method (in global scope).
Well my mistake was not using rvmsudo to install nginx with passenger, instructions here: http://rvm.io/integration/passenger/.

Resources