Nginx is a popular high-performance web server. This tutorial will teach you how to install and start Nginx on your CentOS 7 server.
The steps in this tutorial require a non-root user with sudo
privileges. See our Initial Server Setup with CentOS 7 tutorial to learn how to set up this user.
To add the CentOS 7 EPEL repository, first connect to your CentOS 7 machine via SSH, then use the yum
command to install the extended package repository:
- sudo yum install epel-release
You’ll be prompted to verify that you want to install the software. Type y
then ENTER
to continue.
Next, you’ll install the actual nginx
software package.
Now that the EPEL repository is installed on your server, install Nginx using the following yum
command:
- sudo yum install nginx
Again, answer yes to the verification prompt, then Nginx will finish installing.
Nginx will not start automatically after it is installed. To get Nginx running, use the systemctl
command:
- sudo systemctl start nginx
You can check the status of the service with systemctl status
:
- sudo systemctl status nginx
Output● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2022-01-24 20:14:24 UTC; 5s ago
Process: 1898 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 1896 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 1895 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 1900 (nginx)
CGroup: /system.slice/nginx.service
├─1900 nginx: master process /usr/sbin/nginx
└─1901 nginx: worker process
Jan 24 20:14:24 centos-updates systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jan 24 20:14:24 centos-updates nginx[1896]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jan 24 20:14:24 centos-updates nginx[1896]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jan 24 20:14:24 centos-updates systemd[1]: Started The nginx HTTP and reverse proxy server.
The service should be active
.
If you are running a firewall, run the following commands to allow HTTP and HTTPS traffic:
- sudo firewall-cmd --permanent --zone=public --add-service=http
- sudo firewall-cmd --permanent --zone=public --add-service=https
- sudo firewall-cmd --reload
You can do a spot check right away to verify that everything went as planned by visiting your server’s public IP address in your web browser:
http://server_domain_name_or_IP/
You will see the default CentOS 7 Nginx web page, which is there for informational and testing purposes. It should look something like this:
If you see this page, then your web server is now correctly installed.
Note: To find your server’s public IP address, find the network interfaces on your machine by typing:
- ip addr
Output1. lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
. . .
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
. . .
You may see a number of interfaces here depending on the hardware available on your server. The lo
interface is the local loopback interface, which is not the one we want. In our example above, the eth0
interface is what we want.
Once you have the interface name, you can run the following command to reveal your server’s public IP address. Substitute the interface name you found above:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Before continuing, you will probably want to enable Nginx to start when your system boots. To do so, enter the following command:
- sudo systemctl enable nginx
Nginx is now installed and running.
If you want to start serving your own pages or application through Nginx, you will want to know the locations of the Nginx configuration files and default server root directory.
The default server root directory is /usr/share/nginx/html
. Files that are placed in there will be served on your web server. This location is specified in the default server block configuration file that ships with Nginx, which is located at /etc/nginx/conf.d/default.conf
.
Any additional server blocks, known as Virtual Hosts in Apache, can be added by creating new configuration files in /etc/nginx/conf.d
. Files that end with .conf
in that directory will be loaded when Nginx is started.
The main Nginx configuration file is located at /etc/nginx/nginx.conf
. This is where you can change settings like the user that runs the Nginx daemon processes, and the number of worker processes that get spawned when Nginx is running, among other things.
Once you have Nginx installed on your CentOS 7 server, you can go on to install the full LEMP Stack on CentOS 7.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
This comment has been deleted
Hi All, I was able to install Nginx successfully, but I could not start the web server. BTW, in the text below, Ip-ip-… or xxxx-… are placeholder for the actual IP address of my droplet.
[root@xxxx… ~]# sudo systemctl start nginx Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details.
So I did as instructed and I see this:
[root@xxx ~]# systemctl status nginx.service ● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Thu 2021-11-11 17:10:28 UTC; 31s ago Process: 12621 ExecStart=/usr/sbin/nginx (code=exited, status=1/FAILURE) Process: 12618 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 12615 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Nov 11 17:10:26 ip-ip-ip-ip.cprapid.com nginx[12621]: nginx: [emerg] bind() to [::]:80 failed …e) Nov 11 17:10:27 ip-ip-ip-ip.cprapid.com nginx[12621]: nginx: [emerg] bind() to 0.0.0.0:80 fail…e) Nov 11 17:10:27 ip-ip-ip-ip.cprapid.com nginx[12621]: nginx: [emerg] bind() to [::]:80 failed …e) Nov 11 17:10:27 ip-ip-ip-ip.cprapid.com nginx[12621]: nginx: [emerg] bind() to 0.0.0.0:80 fail…e) Nov 11 17:10:27 ip-ip-ip-ip.cprapid.com nginx[12621]: nginx: [emerg] bind() to [::]:80 failed …e) Nov 11 17:10:28 ip-ip-ip-ip.cprapid.com systemd[1]: nginx.service: control process exited, cod…=1 Nov 11 17:10:28 ip-ip-ip-ip.cprapid.com nginx[12621]: nginx: [emerg] still could not bind() Nov 11 17:10:28 ip-ip-ip-ip.cprapid.com systemd[1]: Failed to start The nginx HTTP and reverse…r. Nov 11 17:10:28 ip-ip-ip-ip.cprapid.com systemd[1]: Unit nginx.service entered failed state. Nov 11 17:10:28 ip-ip-ip-ip.cprapid.com systemd[1]: nginx.service failed. Hint: Some lines were ellipsized, use -l to show in full.
Someone advised to do the next:
root@xx…# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Also this:
[root@ip-ip-ip-ip ~]# sudo netstat -plutn | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4018/httpd
tcp6 0 0 :::80 :::* LISTEN 4018/httpd
I exited out the console and loggin again, and tried. Same result.
So I am stumped! Any advice would be greatly appreciated
Hello Mitchell,
To be very honest, it’s an awesome step-by-step guide but it seems you might forget to mention firewall adjusting rules. I think Redhat &Centos enable the firewalls by default and they will block access to port 80. Try to do the needful.
Thanks,
Angelina S
How to upload files on that after installation? and how to protect files or hotlink them? only my domain allowed…
Mitchell,
Thanks for sharing such good and informative content, It does really help. Please keep it continue.
Thanks again,
Nisha
Wow Great Information. I read your blog very useful and helpful to me. Thanksr sharing it. getintopc
Thanks for this information which helps to install nginx within 3 to 4 steps
You forgot to mention adjusting the firewall rules.I find another way of installing Nginx. I tried following the instructions step by step.
Good catch! Updated… thanks for sharing…
SELINUX is enabled on the Digital Ocean droplet. This will interfere with nginx. You need to disable it or set up a policy.
This guide is a few years old, so perhaps SELINUX was always enabled by default.