Install more_set_headers in nginx 1.15.8
Ubuntu 16 Server - load_module modules/ngx_http_headers_more_filter_module.so
does not work out the box from a fresh install.
root@ /etc/nginx # nginx -V
nginx version: nginx/1.15.8
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)
built with OpenSSL 1.0.2g 1 Mar 2016
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
While trying to install nginx-extras
I receive a dependency error.
root@ /etc/nginx # apt-get install nginx-extras
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
nginx-extras : Depends: nginx-common (= 1.10.3-0ubuntu0.16.04.3) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
To meet the dependency, it takes me back to nginx 1.10
I installed nginx by adding to the /etc/apt/sources.list
file
# nginx
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx
Can someone shed some light on my issue?
Solution 1:
This is what I did to have enable more_set_headers on Ubuntu 16.04, since the module is an extra module and not created by nginx as @MichaelHampton explained below. With his guidance I was able to install nginx with more_set_headers.
#== I backed up my nginx folder to home
tar -czvf /home/nginx.tar.gz /etc/nginx
#== I removed then purged nginx - not sure if both are necessary
sudo apt remove nginx
sudo apt autoremove
sudo apt purge nginx
#== I removed all nginx entries from /etc/apt/sources.list
nano /etc/apt/sources.list
#== I did an apt-update and installed nginx
sudo apt update
sudo apt upgrade
sudo apt install nginx
#== I checked the version that was installed
nginx -v
#== I then upgraded nginx to the latest stable
sudo apt install software-properties-common
nginx=stable
sudo add-apt-repository ppa:nginx/$nginx
sudo apt update
sudo apt dist-upgrade
#== I then installed nginx-extras
sudo apt install nginx-extras
Once the above was completed, I edited my /etc/nginx/nginx.conf
and added the following as my first line:load_module modules/ngx_http_headers_more_filter_module.so;
I then added the following to the http block:more_set_headers Server: Uber;
I checked to see if my config was okay with nginx -t
Finally, I restarted the server with service nginx restart
As a final check, I went over to https://securityheaders.com, to see if "Nginx" was showing. Be sure to check Hide Results and Follow redirects
Hope this helps someone
Solution 2:
The answer by Curuios Sam doesn't explain why it happens and the comment by Michael Hampton does, I am compiling the both below to easier readability.
This happens because the module(http-more) you are looking for does not exist in the nginx.com repo.
That module list can be found in https://www.nginx.com/products/nginx/modules (filter author by nginx).
The http-more can be found the the nginx-extras packages from the nginx ppa.
https://launchpad.net/~nginx/+archive/ubuntu/stable
First remove the nginx.com repo from /etc/apt/sources.list, then add the ppa.
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
then upgrade nginx-common and nginx-extras
sudo apt-get install nginx-common
sudo apt-get install nginx-extras
Solution 3:
Have a look at my tutorial here for more details about how I did this on Amazon Linux (similar to Centos / Red Hat). I wrote this a while back, and I update it occasionally, but it may not be perfect. I'll test it and update again when I get time.
cd /home/ec2-user
mkdir nginx-build
cd nginx-build
service nginx stop
yum groupinstall "Development Tools"
yum install pcre-devel zlib-devel openssl-devel
wget http://nginx.org/download/nginx-1.15.8.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
git clone https://github.com/openresty/headers-more-nginx-module.git
tar -xzf nginx-1.15.8.tar.gz
tar -xzf v0.33.tar.gz
# Includes some machine specific optimisations
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module --with-threads --with-file-aio --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=native' --add-module=../ngx_cache_purge-2.3 --add-module=../headers-more-nginx-module
make && make install
make clean (NB: optional)
service nginx start