Nginx configuration (Part 1) - Install and configure a Nginx Server for a website and set up domain name

Nginx configuration (Part 1) - Install and configure a Nginx Server for a website and set up domain name

Install and configure a Nginx Server on Linux for a website

1. Install Nginx
Step 1Update Software Repositories
$ sudo apt-get update
Step 2Install Nginx

On Ubuntu:

$ sudo apt-get install nginx

Note: If the system generates an error about the lock file, please see How To Fix Could Not Get Lock /Var/Lib/Dpkg/Lock Error for suggestions.

On CentOS and Red Hat:

$ yum install nginx
Step 3Verify the Installation
$ nginx -v
Step 4Controlling the Nginx Service

Start by checking the status of the Nginx service:

$ sudo systemctl status nginx
If the status displays active (running), Nginx has already been started. Press Ctrl + z to exit the status display.

If Nginx is not running, use the following command to launch the Nginx service:

$ sudo systemctl start nginx

To set Nginx to load when the system starts, enter the following:

$ sudo systemctl enable nginx

To stop the Nginx service, enter the following:

$ sudo systemctl stop nginx

To prevent Nginx from loading when the system boots:

$ sudo systemctl disable nginx

To reload the Nginx service (used to apply configuration changes):

$ sudo systemctl reload nginx

For a hard restart of Nginx:

$ sudo systemctl restart nginx

Check syntax Nginx config file:

$ sudo nginx -t

Test Nginx from local:

Make sure that the Nginx service is running, as in Step 4. Open a web browser, and navigate to the following web address: http://127.0.0.1 or http://localhost

Step 5Allow Nginx Traffic
Nginx needs access through the system’s firewall. To do this, Nginx installs a set of profiles for the Ubuntu default ufw (UnComplicated Firewall).
Method 1
    Start by displaying the available Nginx profiles:
    $ sudo ufw app list
    To grant Nginx access through the default Ubuntu firewall, enter the following:
    $ sudo ufw allow 'nginx http'
    Refresh the firewall settings by entering:
    $ sudo ufw reload
    For encrypted (https) traffic, enter:
    $ sudo ufw allow 'nginx https'
    To allow both http and https, enter:
    $ sudo ufw allow 'nginx full'
Method 2: Open port 80 and 443 using UFW on Ubuntu Linux (firewall config)
UFW is an acronym for uncomplicated firewall. It is used for managing a Linux firewall and aims to provide an easy to use interface for the user. To open port 80 (HTTP) and HTTPS (443), run:
    $ sudo ufw allow https comment 'Open all to access Nginx port 443'
    $ sudo ufw allow http comment 'Open access Nginx port 80'
    $ sudo ufw allow ssh comment 'Open access OpenSSH port 22'
    $ sudo ufw enable
    Verify it:
    $ sudo ufw status
    Result:
        Status: active

        To                         Action      From
        --                         ------      ----
        Nginx HTTP                 ALLOW       Anywhere                  
        443                        ALLOW       Anywhere                   # Open all to access Nginx port 443
        80                         ALLOW       Anywhere                   # Open access Nginx port 80
        22                         ALLOW       Anywhere                   # Open access OpenSSH port 22
        Nginx HTTP (v6)            ALLOW       Anywhere (v6)             
        443 (v6)                   ALLOW       Anywhere (v6)              # Open all to access Nginx port 443
        80 (v6)                    ALLOW       Anywhere (v6)              # Open access Nginx port 80
        22 (v6)                    ALLOW       Anywhere (v6)              # Open access OpenSSH port 22
        
Method 3: Open port 80 and 443 using firewall-cmd on CentOS / RHEL / Fedora
    $ sudo firewall-cmd --permanent --zone=public --add-service=http
    $ sudo firewall-cmd --permanent --zone=public --add-service=https
    $ sudo firewall-cmd --reload
    Verify that port 80 or 443 opened using ss command:
    $ sudo ss -tulpn
    $ sudo systemctl enable nginx
Step 6Test Nginx
    Find out your Ubuntu Linux server IP address: Commands to find ip address
    $ ip addr show
    $ ifconfig
    $ hostname -I
    ==> Open a web browser and type the IP address to test Nginx
    The default Nginx page indicates that the Ubuntu and Nginx server is running fine on your system.
2. Configure Nginx Server
  • In Nginx, a server block is a configuration that works as its own server. By default, Nginx has one server block preconfigured.
  • It is located at /var/www/html. However, it can be configured with multiple server blocks for different sites.
  • Khi sử dụng Nginx, bạn có thể sử dụng server blocks riêng cho từng website giúp cho việc quản lý cấu hình được dễ dàng hơn.
Step 1Tạo 1 user có tên nginx kiểu system với thư mục home là /var/www để thực thi Nginx
$ sudo adduser --system --home=/var/www --disabled-login --disabled-password --group nginx

Notes:

  • Use command: man adduser or adduser --help to understand more about adduser command.
  • Type id nginx to check nginx whether created or not.
  • disabled-login để ngăn ngừa đăng nhập bằng user này.
  • disabled-password để loại bỏ password.
Step 2Create a Directory for the Test Domain
$ sudo mkdir -p /var/www/test_domain.com/html
Step 3Use chmod to configure ownership and permission rules:
    CHMOD/CHOWN trên Linux
    Gán quyền sở hữu thư mục /var/www/test_domain.com cho user nginx
    $ sudo chown –R nginx:nginx /var/www/test_domain.com
    Để đảm bảo thư mục test_domain.com của bạn được phân quyền chính xác hãy sử dụng lệnh sau:
    $ sudo chmod –R 755 /var/www/test_domain.com
    Quyền 755 trên folder tương ứng với drwxr-xr-x có nghĩa là user sở hữu folder có full quyền, group sở hữu folder có quyền đọc và thực thi, other cũng có quyền đọc và thực thi.
Step 4Create an index.html File for the Server Block
$ sudo nano /var/www/test_domain.com/html/index.html
In the text editor, enter any HTML code and save it.
Step 5Create Nginx Server Block Configuration
$ sudo nano /etc/nginx/sites-available/test_domain.com.conf
Enter the following code:
    server    {
        listen 80;
        listen [::]:80;

        server_name test_domain.com www.test_domain.com;
        root /var/www/test_domain.com/html;
        index index.html;

        access_log /var/www/test_domain.com/access.log;
        error_log /var/www/test_domain.com/error.log;

        location / {
            try_files $uri $uri/ =404;
        }
    }

Notes:

  • listen 80: Lắng nghe và nhận các kết nối trên cổng 80 (HTTP Port)
  • listen [::]:80: Tương tự nhưng cho địa chỉ IPv6
  • server_name: Địa chỉ tên miền cho website
  • root: Đường đẫn thư mục chứa source code website
  • index: File sẽ gọi đến đầu tiên khi User vào website
  • access_log: Đường dẫn đến file log truy cập
  • error_log: Đường dẫn đến file log lỗi
  • location: Cách trả về tài nguyên trên máy chủ, khi có request tới 1 URL
  • try_files: Cố gắng phục vụ các tập tin được chỉ rõ (các tham số từ 1 đến N-1 trong chỉ thị), nếu không có tập tin nào tồn tại, nhảy đến khối location được khai báo (tham số cuối cùng trong chỉ thị - ví dụ trên là 404) hoặc phục vụ 1 URI được chỉ định.
Step 6Enable the new server block file by creating a symbolic link from the file to the sites-enabled directory:
$ sudo ln –s /etc/nginx/sites-available/test_domain.com.conf /etc/nginx/sites-enabled/test_domain.com.conf

Notes:

  • Cài đặt Nginx có thể cho nhiều hơn một trang web và các tệp xác định máy chủ. Các trang web của bạn nằm trong thư mục /etc/nginx/sites-available.
  • Thư mục sites-available bao gồm các cấu hình cho virtual hosts. Điều này cho phép máy chủ web được cấu hình cho nhiều trang web có cấu hình đặc biệt. Các trang web trong thư mục này không hoạt động và chỉ được bật nếu chúng ta tạo một sumbolic link vào thư mục /etc/nginx/sites-enabled.
  • Có thể thay thế Step 5, 6 bằng cách tạo file virtual host cho test_domain.com trong thư mục /etc/nginx/conf.d:
    $ sudo nano /etc/nginx/conf.d/test_domain.com.conf
Step 7Test the Nginx configuration for correct syntax:
$ sudo nginx -t
If there are no errors, the output will look like this:
    Output
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
Step 8Restart the Nginx service for the changes to take effect
$ sudo systemctl restart nginx
Step 9Modify the Hosts File (Optional)
If you’re using a test domain name that isn’t registered or public, the /etc/hosts file may need to be modified to display the test_domain.com page.
  • Display the system’s IP address with the following command:
    $ hostname -i
  • Next, open /etc/hosts for editing:
    $ sudo nano /etc/hosts
  • In an empty space just below the localhost information, add the following line (nhớ sử dụng phím Tab thay vì phím cách) and save:
    127.0.1.1 test_domain.com www.test_domain.com
    Tips: You can use IP address from 127.0.1.1 to 127.0.1.255.

    Notes: Bạn có thể truy cập test_domain.com từ browser trên window bằng cách:

    • Thay đổi root trong file /etc/nginx/sites-available/default từ root /var/www/html; thành root /var/www/test_domain.com/html; và lưu lại.
    • Trỏ IP trong file hosts của window để có thể phân giải tên miền test_domain.com:
          Mở file hosts theo đường dẫn: C:\Windows\System32\drivers\etc\hosts
          Thêm phân giải tên miền theo cấu trúc IP (IP của máy linux server) + Dấu cách + tên website của bạn và lưu lại:
          192.168.1.6 test_domain.com
          ================ Đây cũng là cách để chặn trang web ==========
          127.0.0.1 google.com
127.0.0.1 là địa chỉ IP loopback sẽ luôn trỏ về hệ thống của riêng bạn. Vì trang web không được lưu trữ trên máy, nên trình duyệt sẽ cho biết trang web không thể được tìm thấy. Bây giờ, trang web google.com đã bị chặn một cách hiệu quả.
  • Có thể thay thế Step 5, 6 bằng cách tạo file virtual host cho test_domain.com trong thư mục /etc/nginx/conf.d:
    $ sudo nano /etc/nginx/conf.d/test_domain.com.conf
  • Step 10Check test_domain.com in a Web Browser
    Open a browser window and navigate to test_domain.com (or the domain name you configured in Nginx). You should see the message you entered in Part 3.
    Những điều quan trong khi configure Nginx
    Important Nginx File Locations
    By default, Nginx stores different configuration and log files in the following locations:
    • /var/www/html – Website content as seen by visitors.
    • /etc/nginx – Location of the main Nginx application files.
    • /etc/nginx/nginx.conf – The main Nginx configuration file.
    • /etc/nginx/sites-available – List of all websites configured through Nginx.
    • /etc/nginx/sites-enabled – List of websites actively being served by Nginx.
    • /var/log/nginx/access.log – Access logs tracking every request to your server.
    • /var/log/ngins/error.log – A log of any errors generated in Nginx.
    Verify that Nginx ports are open on Ubuntu Linux with the ss command or netstat command
        $ ss -tulpn
        $ ss -tulpn | grep :80
        $ netstat -tulpn

    Reference:

    Đăng nhận xét

    Mới hơn Cũ hơn