Tan Phat Media

Nginx Config Generator

Tạo file cấu hình Nginx với giao diện trực quan

Cấu hình Server
Generated Config
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.example.com;
    
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    # SSL Configuration
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # Security Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    # Gzip Compression
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml;

    # General Settings
    root /var/www/html;
    index index.html index.htm;
    client_max_body_size 10m;

    # Static File Caching
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|woff|ttf|svg)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location /api {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # Default location
    location / {
        try_files $uri $uri/ /index.html;
    }

    # Error pages
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
}

Hợp tác ngay với Tấn Phát Digital

Chúng tôi không chỉ thiết kế website, mà còn giúp doanh nghiệp xây dựng thương hiệu số mạnh mẽ. Cung cấp dịch vụ thiết kế website trọn gói từ thiết kế đến tối ưu SEO. Hãy liên hệ ngay với Tấn Phát Digital để cùng tạo nên những giải pháp công nghệ đột phá, hiệu quả và bền vững cho doanh nghiệp của bạn tại Hồ Chí Minh.

Tạo file server block cho Nginx: SSL, gzip, cache tệp tĩnh và reverse proxy

Công cụ dựng sẵn một hoặc nhiều khối server hoàn chỉnh cho Nginx từ các ô nhập tên miền, đường dẫn gốc, đường dẫn chứng chỉ và danh sách location. Nội dung file cập nhật ngay theo từng ký tự bạn gõ, có nút chép và nút tải về thành tệp đặt tên theo tên miền để bạn đưa thẳng vào thư mục cấu hình trên máy chủ.

Tính năng nổi bật

  • Nhập tên miền, thư mục gốc và danh sách tệp index, khối server hiện ra tức thì ở khung bên phải
  • Bật SSL để sinh kèm khối chuyển hướng cổng 80 sang HTTPS và khối riêng đưa www về tên miền chính
  • Ô đường dẫn chứng chỉ và khóa điền sẵn theo cấu trúc thư mục của Certbot, kèm bộ tham số TLS 1.2 và 1.3
  • Công tắc bật bốn header bảo mật: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection và Referrer-Policy
  • Công tắc bật gzip cho nhóm tệp văn bản, kèm ngưỡng dung lượng tối thiểu và gzip_vary
  • Khối cache tệp tĩnh theo biểu thức chính quy với thời hạn expires tự đặt và header Cache-Control
  • Thêm bao nhiêu location tùy ý, mỗi cái chọn một trong ba kiểu: chuyển tiếp ngược, phục vụ tệp tĩnh hoặc chuyển hướng 301
  • Chỉnh client_max_body_size và ba mốc thời gian chờ của proxy, chép hoặc tải file với tên đặt theo tên miền

Vì sao nên dựng khung config trước rồi mới sửa trực tiếp trên máy chủ

Cú pháp Nginx không dài nhưng có nhiều chỗ dễ sai theo cách không báo lỗi ngay: quên dấu chấm phẩy cuối dòng, đặt directive vào sai khối, viết proxy_pass thiếu giao thức, hoặc bỏ sót nhóm header khi chuyển tiếp ngược khiến ứng dụng phía sau nhận nhầm địa chỉ IP của khách. Khi bạn gõ trực tiếp trên máy chủ qua SSH, mỗi lần thử là một lần chạy nginx -t rồi reload, và nếu file đang phục vụ website thật thì khoảng thời gian sai sót đó là thời gian khách truy cập gặp lỗi. Dựng khung trước trên trình duyệt cho phép bạn nhìn toàn bộ file cùng lúc, đối chiếu từng khối với ý định của mình, rồi mới dán lên máy chủ đúng một lần. Cách này đặc biệt hữu ích khi bạn quản lý nhiều site trên cùng một máy chủ và muốn tất cả dùng chung một khuôn: cùng bộ tham số TLS, cùng nhóm header, cùng thời hạn cache, chỉ khác tên miền và thư mục gốc. Việc thống nhất khuôn giúp lúc gỡ lỗi bạn biết chắc khác biệt nằm ở đâu.

Lợi ích khi sử dụng

  • Nhìn thấy toàn bộ file trước khi đụng vào máy chủ đang chạy, không phải sửa mò qua từng lần reload
  • Bộ tham số TLS và nhóm header được điền sẵn nên không cần tra lại tài liệu mỗi lần dựng site mới
  • Khối chuyển tiếp ngược đã kèm đủ các header cần thiết để ứng dụng phía sau nhận đúng địa chỉ IP và giao thức gốc
  • Cùng một khuôn cho mọi site trên máy chủ, lúc so sánh để gỡ lỗi thì khác biệt lộ ra ngay
  • Tệp tải về đặt tên theo tên miền nên bỏ vào thư mục cấu hình là dùng được, không phải đổi tên thủ công

Cách tạo file cấu hình Nginx bằng công cụ này

  1. 1Ở thẻ Basic, nhập tên miền vào ô Server Name, sửa Root Path thành thư mục chứa mã nguồn và điều chỉnh danh sách tệp index nếu bạn chạy PHP.
  2. 2Sang thẻ SSL, bật công tắc SSL rồi sửa hai đường dẫn chứng chỉ cho khớp tên miền thật, bật thêm HTTP/2 và nhóm header bảo mật nếu cần.
  3. 3Sang thẻ Perf, bật gzip và cache tệp tĩnh, đặt thời hạn cache, rồi chỉnh client_max_body_size cho vừa dung lượng tệp mà người dùng được tải lên.
  4. 4Sang thẻ Locations, bấm Thêm Location cho từng đường dẫn cần xử lý riêng, chọn kiểu Proxy nếu chuyển tiếp sang ứng dụng chạy ở cổng nội bộ, Static nếu trỏ vào thư mục, Redirect nếu muốn trả về 301.
  5. 5Bấm Download để tải tệp đặt theo tên miền, đưa lên máy chủ vào thư mục cấu hình, chạy nginx -t để kiểm tra cú pháp rồi mới reload dịch vụ.

Đọc hiểu file mà công cụ sinh ra: thứ tự các khối và ý nghĩa từng directive

File sinh ra có thể chứa tới ba khối server. Khối thứ nhất chỉ xuất hiện khi bạn bật SSL, nó lắng nghe cổng 80 trên cả IPv4 lẫn IPv6 và trả về mã 301 đưa mọi yêu cầu sang HTTPS, trong đó biến $request_uri giữ nguyên phần đường dẫn cùng chuỗi truy vấn nên khách không bị rơi về trang chủ. Khối thứ hai cũng chỉ xuất hiện khi bật SSL, nó phục vụ tên miền có www, khai báo lại chứng chỉ vì bắt tay TLS diễn ra trước khi Nginx đọc được đường dẫn, rồi chuyển hướng về tên miền chính. Khối thứ ba là khối phục vụ thật: nó chứa tham số TLS gồm hai phiên bản giao thức được giữ lại là 1.2 và 1.3, bộ mã hóa dùng trao đổi khóa ECDHE, bộ nhớ đệm phiên chia sẻ mười megabyte và thời hạn phiên một ngày. Tiếp đó là nhóm header bảo mật gắn cờ always để áp dụng cả cho trang lỗi, phần nén gzip với ngưỡng tối thiểu 1024 byte, rồi mới tới root, index và giới hạn dung lượng tải lên. Cuối file là location mặc định dùng try_files và hai dòng error_page. Biết thứ tự này giúp bạn chèn thêm directive vào đúng chỗ khi cần mở rộng.

Vì sao khối cache tệp tĩnh có thể nuốt mất location proxy của bạn

Đây là cái bẫy phổ biến nhất với file mà công cụ sinh ra, và nó không phải lỗi cú pháp nên nginx -t vẫn báo thành công. Nginx chọn location theo thứ tự ưu tiên chứ không theo thứ tự xuất hiện trong file: trước hết là so khớp chính xác bằng dấu bằng, kế đến là tiền tố có ký hiệu ^~, sau đó mới tới các biểu thức chính quy theo thứ tự trong file, và cuối cùng mới là tiền tố thường. Khối cache tệp tĩnh mà công cụ sinh ra là một biểu thức chính quy bắt các phần mở rộng ảnh, css, js và font. Nếu bạn thêm một location kiểu proxy ở đường dẫn /api rồi ứng dụng phía sau lại trả về tệp có đuôi .js hoặc .png dưới đường dẫn đó, yêu cầu sẽ rơi vào khối biểu thức chính quy chứ không vào khối proxy, và Nginx đi tìm tệp thật trong thư mục gốc rồi trả 404. Triệu chứng điển hình là ứng dụng chạy được nhưng thiếu ảnh hoặc thiếu tệp mã nguồn phía trước. Cách xử lý là sửa location proxy thành dạng có ký hiệu ^~ ở đầu để nó thắng biểu thức chính quy, hoặc thu hẹp biểu thức chính quy lại cho khỏi chạm vào đường dẫn của ứng dụng.

Chứng chỉ, cú pháp listen và những thay đổi theo phiên bản Nginx

Hai đường dẫn chứng chỉ điền sẵn theo cấu trúc thư mục mà Certbot tạo ra, trong đó fullchain.pem gồm chứng chỉ của bạn nối với chứng chỉ trung gian, còn privkey.pem là khóa riêng. Đừng dùng cert.pem thay cho fullchain.pem vì thiếu chứng chỉ trung gian sẽ khiến một số trình duyệt di động và nhiều thư viện gọi API báo lỗi không tin cậy, trong khi trình duyệt máy tính vẫn hiển thị bình thường nên lỗi dễ bị bỏ sót. Về cú pháp listen, công cụ sinh ra dạng đặt http2 ngay sau ssl trên cùng dòng. Dạng này đúng với các bản Nginx cũ, nhưng từ bản 1.25.1 trở đi nó bị đánh dấu là lối viết cũ và Nginx sẽ ghi cảnh báo vào log khi khởi động, cách viết mới là để dòng listen chỉ khai báo ssl rồi thêm một dòng riêng bật http2. Cảnh báo này không làm dịch vụ dừng nên bạn có thể để nguyên, nhưng nếu muốn log sạch thì sửa lại sau khi dán file lên máy chủ. Cũng lưu ý file này không kèm header HSTS, không bật OCSP stapling và không khai báo ssl_dhparam, đó là những thứ bạn tự thêm nếu muốn đạt điểm cao ở các trang chấm cấu hình TLS.

Nginx và Apache khác nhau chỗ nào, và khi nào bạn cần tệp .htaccess thay vì file này

Hai phần mềm cùng phục vụ web nhưng khác nhau ở chỗ đặt cấu hình. Nginx đọc toàn bộ cấu hình đúng một lần lúc khởi động hoặc lúc reload, mọi quy tắc nằm tập trung trong file cấu hình mà chỉ người có quyền quản trị máy chủ mới sửa được, và người dùng bình thường không thể thay đổi hành vi máy chủ bằng cách đặt tệp vào thư mục web. Apache thì ngoài file cấu hình chính còn cho phép đặt tệp .htaccess ở từng thư mục, và với mỗi yêu cầu nó quét ngược lên cây thư mục để gom các tệp đó lại. Hệ quả thực tế rất rõ: trên Apache bạn sửa quy tắc chuyển hướng rồi lưu tệp là có hiệu lực ngay, không cần quyền root và không cần reload dịch vụ, đổi lại phải trả giá bằng thao tác đọc đĩa thêm ở mỗi lần truy cập. Trên Nginx bạn phải có quyền vào máy chủ và phải chạy reload, đổi lại cấu hình chỉ được đọc một lần nên nhanh hơn. Cú pháp cũng không chuyển đổi qua lại được: Apache dùng RewriteCond với RewriteRule, còn Nginx dùng location cùng try_files và return. Nếu bạn đang thuê hosting chia sẻ chạy Apache và không có quyền quản trị, hãy dùng công cụ tạo tệp .htaccess tại /vi/tools/htaccess-generator thay cho trang này.

Đưa file lên máy chủ: kiểm tra cú pháp, tạo liên kết, tải lại và cách quay lui

Trên các bản Linux họ Debian và Ubuntu, thư mục quy ước là sites-available để chứa file và sites-enabled để chứa liên kết tượng trưng trỏ tới file đã bật. Bạn đặt tệp tải về vào thư mục thứ nhất rồi tạo liên kết sang thư mục thứ hai. Trên các bản họ Red Hat như AlmaLinux hay Rocky Linux thì không có cặp thư mục này, file cấu hình đặt thẳng vào conf.d và Nginx nạp mọi tệp có đuôi .conf trong đó. Trước khi tải lại dịch vụ, luôn chạy lệnh kiểm tra cú pháp: nó không chỉ bắt lỗi dấu chấm phẩy mà còn phát hiện chứng chỉ không đọc được hoặc cổng bị chiếm. Khi kiểm tra đã sạch, hãy dùng reload chứ đừng dùng restart, vì reload cho tiến trình cũ phục vụ nốt các kết nối đang mở rồi mới nhường chỗ, còn restart cắt đứt tất cả. Nếu website hỏng sau khi tải lại, cách quay lui nhanh nhất là xóa liên kết tượng trưng của site vừa thêm rồi reload lại, hệ thống trở về đúng trạng thái trước đó. Vì vậy hãy giữ lại bản cũ của file thay vì ghi đè, và nếu máy chủ chạy nhiều site như trường hợp một máy chủ dùng chung cho hàng chục tên miền, hãy đặt tên file theo tên miền để lúc cần tìm không phải mở từng tệp.

Câu hỏi thường gặp (FAQ)

Tôi bật chuyển hướng www nhưng tắt SSL, sao file không có khối xử lý www?

Vì cả hai khối chuyển hướng trong công cụ đều gắn với điều kiện bật SSL. Khi tắt SSL, file chỉ còn đúng một khối server nghe cổng 80 cho tên miền chính. Nếu bạn cần chuyển hướng www mà chưa có chứng chỉ, hãy tự thêm một khối server nghe cổng 80 với server_name là tên miền có www và một dòng return 301.

Nginx báo cảnh báo dòng listen dùng lối viết cũ, có sao không?

Không ảnh hưởng hoạt động. Từ bản 1.25.1, cách đặt http2 ngay trên dòng listen bị coi là lối viết cũ, Nginx vẫn chạy nhưng ghi một dòng cảnh báo mỗi lần khởi động. Muốn log sạch thì bỏ chữ http2 khỏi dòng listen và thêm một dòng riêng bật http2 bên trong khối server.

Đặt file này vào thư mục nào trên máy chủ?

Trên Ubuntu và Debian, đặt vào sites-available rồi tạo liên kết tượng trưng sang sites-enabled. Trên AlmaLinux, Rocky Linux hay CentOS thì đặt thẳng vào conf.d với đuôi .conf. Nếu bạn tự biên dịch Nginx, hãy mở nginx.conf xem dòng include trỏ tới thư mục nào.

Vì sao ảnh và tệp js dưới đường dẫn proxy lại trả về 404?

Vì khối cache tệp tĩnh là biểu thức chính quy và nó được ưu tiên hơn location dạng tiền tố. Yêu cầu tới ảnh trong đường dẫn của ứng dụng bị khối này bắt trước, Nginx đi tìm tệp thật trong thư mục gốc rồi trả 404. Sửa bằng cách thêm ký hiệu ^~ vào đầu location proxy.

Công cụ có sinh khối upstream để cân bằng tải không?

Không. Location kiểu Proxy chỉ trỏ tới đúng một địa chỉ đích. Muốn phân tải cho nhiều máy chủ ứng dụng, bạn phải tự thêm khối upstream ở cấp http bên ngoài khối server rồi đổi đích của proxy_pass thành tên của khối upstream đó.

root và alias trong hai kiểu location khác nhau thế nào?

Với root, Nginx nối đường dẫn gốc với toàn bộ đường dẫn yêu cầu. Với alias mà công cụ dùng cho location kiểu Static, phần đường dẫn khớp với location bị cắt bỏ rồi mới nối phần còn lại vào thư mục đích. Vì vậy khi dùng alias, hãy chú ý dấu gạch chéo cuối cả hai vế phải nhất quán.

Giới hạn dung lượng tải lên mặc định 10m có đủ không?

Đủ cho ảnh và tài liệu thông thường. Nếu người dùng cần tải video hoặc tệp nén lớn, hãy tăng con số này và nhớ chỉnh cả giới hạn tương ứng phía ứng dụng. Khi vượt ngưỡng, Nginx trả về mã 413 và yêu cầu bị chặn ngay tại máy chủ web trước khi tới ứng dụng.

File có kèm header HSTS không?

Không. Nhóm header bảo mật gồm bốn dòng và không có Strict-Transport-Security. Muốn thêm, bạn tự chèn một dòng add_header vào khối server chính. Hãy cân nhắc kỹ vì khi đã bật, trình duyệt sẽ từ chối mở site qua HTTP trong suốt thời hạn khai báo, kể cả lúc chứng chỉ có sự cố.

Location mặc định dùng try_files có chạy được với WordPress không?

Không đúng hoàn toàn. Dòng mặc định đưa mọi yêu cầu không khớp tệp về index.html, đó là khuôn cho ứng dụng một trang. WordPress cần đưa về index.php kèm chuỗi truy vấn và cần thêm một location chuyển tệp .php sang PHP-FPM, hai phần này bạn phải tự thêm sau khi tải file về.

Sau khi sửa cấu hình nên reload hay restart?

Dùng reload. Lệnh này nạp cấu hình mới, khởi động tiến trình con mới và để tiến trình cũ phục vụ nốt các kết nối đang mở, nên khách không bị ngắt giữa chừng. Restart dừng hẳn dịch vụ rồi bật lại, mọi kết nối đang mở đều đứt và website gián đoạn vài giây.

Có cần khai báo gzip trong từng khối server không?

Không bắt buộc. Bạn có thể đặt các dòng gzip một lần ở cấp http trong nginx.conf để mọi site cùng dùng. Công cụ này đặt chúng trong khối server để file mang theo đủ tham số, tiện khi mỗi site cần một danh sách kiểu nội dung khác nhau. Nếu đã khai ở cấp http, hãy xóa phần trùng cho gọn.

Chép nhiều tên miền vào ô Server Name có được không?

Ô này được ghép thẳng vào dòng server_name, mà Nginx cho phép liệt kê nhiều tên cách nhau bằng dấu cách, nên về kỹ thuật là được. Nhưng khi bật SSL, các khối chuyển hướng sẽ ghép chữ www vào cả chuỗi và cho ra kết quả sai. An toàn nhất là mỗi tên miền một file riêng.

Từ khóa liên quan

  • nginx config generator
  • tạo file cấu hình nginx
  • nginx server block
  • cấu hình nginx ssl
  • nginx reverse proxy nodejs
  • chuyển hướng http sang https nginx
  • nginx chuyển hướng www sang non www
  • nginx gzip
  • nginx cache tệp tĩnh expires
  • nginx security headers
  • nginx proxy_pass là gì
  • nginx try_files spa
  • nginx client_max_body_size 413
  • nginx -t kiểm tra cấu hình
  • sites-available sites-enabled
  • nginx listen 443 ssl http2 deprecated
  • nginx location ưu tiên biểu thức chính quy
  • cấu hình nginx cho vps

Công cụ Developer Tools liên quan

.env Generator

Tạo file .env và .env.example cho dự án.

.gitignore Generator

Tạo .gitignore cho Node.js, Python, Java.

API Mock Generator

Tạo mock JSON data cho API testing.

API Response Formatter

Format và phân tích API response.

API Tester

Test REST API: GET, POST, PUT, DELETE.

Postman Alternative - API Testing Tool Online với Collections, Environment & File Upload

Postman Alternative miễn phí - Test APIs với Collections, Multiple Environments, Pre-request Scripts, Collection Runner, File Upload (form-data), Tests/Assertions, Code Generation (cURL, JS, Python, Node.js). Browser-based, không cần cài đặt. Save requests, export/import collections, auto-save history. Hỗ trợ Bearer Token, Basic Auth, API Key. Hoàn hảo cho API development và testing.

Swagger API Tester - Test API với OpenAPI/Swagger Spec & Authentication Online

Swagger API Tester miễn phí - Import OpenAPI/Swagger specification và test API endpoints với đầy đủ authentication (Bearer Token/JWT, Basic Auth, API Key). Hỗ trợ OpenAPI 3.0, Swagger 2.0, auto-parse endpoints, parameters, request body. Giao diện như Swagger UI với color-coded methods, grouped endpoints, real-time testing. Hoàn hảo cho API development, testing, debugging secured APIs.

Base Converter

Chuyển đổi Binary, Hex, Base32.

Base64 Encoder

Mã hóa/giải mã Base64.

Binary Converter

Chuyển đổi Decimal, Binary, Hex.

Box Shadow Generator

Tạo CSS box-shadow trực quan.

Chmod Calculator

Tính quyền file Linux.

Dịch vụ của Tấn Phát Digital

Đang xây sản phẩm và cần thêm người làm phần nặng?

Gói giải pháp doanh nghiệp

Nền tảng custom cho ngân hàng, y tế và sàn B2B, chuẩn ISO 27001, GDPR, PCI-DSS, SLA 99.99%.

Từ 50.000.000đXem chi tiết →

Dịch vụ phát triển Blockchain & Web3

Smart contract, dApp và NFT marketplace đa chuỗi, audit bảo mật đầy đủ trước khi lên mainnet.

Từ 50.000.000đXem chi tiết →

Dịch vụ thiết kế website tại Hồ Chí Minh

Website doanh nghiệp, bán hàng và đặt lịch, chuẩn SEO ngay từ cấu trúc, tốc độ tải dưới 3 giây.

Từ 5.000.000đXem chi tiết →

Dịch vụ thiết kế landing page

Trang đích riêng cho từng chiến dịch quảng cáo, tỷ lệ chuyển đổi 3–8%, bàn giao trong 5–21 ngày.

Từ 3.000.000đXem chi tiết →

Tư vấn và báo giá miễn phí trong 24 giờ. Xem toàn bộ dịch vụ

Zalo
Facebook
Tấn Phát Digital
Zalo
Facebook