NGINX port proxy not working

apache-2.2domain-name-systemnginx

I am trying to make it so that instead of typing "www.example.com:8080", I just type "www.example.com". I am using NGINX but I cannot seem to get it working. I have found many helpful articles online and all of them say to do the same thing which I have tried but does not work.

I am running on an ubuntu apache2 server

Here what I did:

  1. Sudo into the config file located at /etc/nginx/site-enabled/default
  2. Where it says listen 80, change it to listen 8080
  3. sudo service nginx restart

However, this seems to have no effect.

default

# You may add here your
# server {
#    listen       80;
#    server_name  graychat.net;

#    location / {
#        proxy_pass http://127.0.0.1:8080;
#    }
# }
# statements for each of your virtual hosts to this file

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

server {
        listen 8080 default_server;
        listen [::]:8080 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
        #location /RequestDenied {
        #       proxy_pass http://127.0.0.1:8080;
        #}

        #error_page 404 /404.html;
        # redirect server error pages to the static page /50x.html
        #
        #error_page 500 502 503 504 /50x.html;
        #location = /50x.html {
        #       root /usr/share/nginx/html;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #       fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
        #       fastcgi_pass unix:/var/run/php5-fpm.sock;
        #       fastcgi_index index.php;
        #       include fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#       listen 8000;
#       listen somename:8080;
#       server_name somename alias another.alias;
#       root html;
#       index index.html index.htm;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}
# HTTPS server
#
#server {
#       listen 443;
#       server_name localhost;
#
#       root html;
#       index index.html index.htm;
#
#       ssl on;
#       ssl_certificate cert.pem;
#       ssl_certificate_key cert.key;
#
#       ssl_session_timeout 5m;
#
#       ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#       ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
#       ssl_prefer_server_ciphers on;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

I have made the following edits to the default config file above and restarted but it still does not seem to work

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                proxy_pass 127.0.0.1:8080;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
....
}

—SOLVED PROBLEM—

there was nothing wrong with my config file. When I consulted /var/log/nginx/error.log I saw the error

[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)

So I ran the following commands:

sudo fuser -k 80/tcp
service nginx start

Everything works:)

Best Answer

You have it reversed.

Port 80 is the default HTTP port so typing www.example.com is the same as typing www.example.com:80

Change your listen directive back to listen 80;, make sure you're starting nginx as root and that the port isn't blocked in the firewall and you should be good.

If your backend application is listening on port 8080 already you want to tell nginx to route the request to that address.

location / {
    proxy_pass http://127.0.0.1:8080;
}

This way when a request comes in on port 80 nginx will send it to your application on port 8080, which will return the response to nginx - which will then return it to the user who never sees port 8080 anywhere.