Khác với Apache, Nginx không sử dụng file .htaccess nên khi bạn cần rewrite url sẽ phải convert qua rule của Nginx. Trong bài viết này, mình sẽ đưa ra một số ví dụ các rule của Nginx sử dụng để rewrite url, redirect và một số cấu hình cần thiết khác.

Khi sử dụng, bạn hãy thêm vào file cấu hình conf của tên miền, với HocVPS Script thì các file cấu hình này thường nằm trong thư mục /etc/nginx/conf.d/

Canonical URLs

Đảm bảo website của bạn được search engine index một đường dẫn duy nhất.

www.mydomain.com -> mydomain.com

Redirect toàn bộ request từ www.mydomain.com sang mydomain.com, kèm theo cả đường dẫn và tham số phía sau url.

server {
      server_name www.mydomain.com;
      rewrite ^(.*) $scheme://mydomain.com$1 permanent;
}

mydomain.com -> www.mydomain.com

Redirect toàn bộ request từ mydomain.com sang www.mydomain.com, kèm theo cả đường dẫn và tham số phía sau url.

server {
      server_name mydomain.com;
      rewrite ^(.*) $scheme://www.mydomain.com$1 permanent;
}

SSL Sites

Google hiện tại đang sử dụng SSL là một yếu tố xếp hạng, nếu bạn sử dụng các site eCommerce, hãy sử dụng SSL.

Rule bên dưới sẽ redirect tất cả request sử dụng HTTPS, trường hợp này giả sử bạn sử dụng www.domain.com làm tên miền chính.

# Tells the browser to always force SSL.
if ($scheme != "https") {
    rewrite ^ https://www.mydomain.com$uri permanent;
}
if ($host != "www.mydomain.com") {
    rewrite ^ https://www.mydomain.com$uri permanent;
}

Bắt buộc sử dụng SSL

Bắt buộc phải sử dụng SSL với một đường dẫn bất kỳ:

set $redirect false; 
if ($request_uri ~ ^/manager(\/)?$ ) { 
    set $redirect true; 
} 
if ($scheme = https) { 
    set $redirect false; 
} 
if ($redirect = true) { 
    return 301 https://www.domain.com$request_uri; 
}

Tối ưu Browser Caching

Bằng việc sử dụng browser caching, website của bạn sẽ load nhanh hơn rất nhiều kể từ sau lần visit đầu tiên:

location ~* \.(?:ico|css|js|jpe?g|png|gif|svg|pdf|mov|mp4|mp3|woff)$ {
    expires 7d;
    add_header Pragma public;
    add_header Cache-Control "public";
    gzip_vary on;
}

Giới hạn IP truy cập

Trong trường hợp bạn muốn chỉ một số IP được phép truy cập, hãy sử dụng rule bên dưới:

location /manager/ {
    # allow anyone in 192.168.1.0/24
    allow   192.168.1.0/24;
    
    # allow one workstation
    allow 127.0.0.1;

    # drop rest of the world 
    deny all;
}

Block IP

Khác với trường hợp chỉ cho phép một số IP được truy cập vào, rule bên dưới sẽ block một số IP xác định trước.

location /manager/ {
    # block one workstation
    deny 192.168.1.1;

    # block anyone in 127.0.1.1/24
    deny   127.0.1.1/24;

    # allow rest of the world 
    allow all;
}

Ngăn những site khác sử dụng hình ảnh

Với đoạn code dưới, bạn sẽ hạn chế những site khác sử dụng hình ảnh trực tiếp:

location ~* \.(gif|png|jpe?g)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. .domain.com *.domain.com;
     if ($invalid_referer) {
        return   403;
    }
}

Nếu bạn muốn chặn sử dụng ảnh trong 1 thư mục cụ thể:

location /wp-content/ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. .domain.com *.domain.com;
     if ($invalid_referer) {
        return   403;
    }
}

Nếu bạn muốn thay vì báo lỗi mà hiển thị một hình ảnh khác, hãy sử dụng code bên dưới:

location ~* \.(gif|png|jpe?g)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. .domain.com *.domain.com;
     if ($invalid_referer) {
        rewrite (.*)\.(jpg|jpeg|png|gif)$ http://www.domain.com/images/warning.jpg;
    }
}

Lưu ý: Nếu trong cấu hình Nginx của website đã tồn tại đoạn cấu hình riêng về file hình ảnh/video thì bạn phải gộp chung với đoạn cấu hình đó chứ không tách riêng rẽ. Ví dụ đối với HocVPS Script:

location ~* \.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|eot|svg|ttf|woff)$ {
		valid_referers none blocked ~.google. ~.bing. ~.yahoo. hocvps.com *.hocvps.com;
		if ($invalid_referer) {
			return 403;
			}
		gzip_static off;
		add_header Pragma public;
		add_header Cache-Control "public, must-revalidate, proxy-revalidate";
		access_log off;
		expires 30d;
		break;
        }

Bảo vệ thư mục bằng mật khẩu

Đầu tiên, bạn cần sử dụng tool này để tạo file .htpasswd, sau đó dùng đoạn code bên dưới, giả sử mình lưu ở /root/.htpasswd

location /protectme/ {
    auth_basic "Restricted";
    auth_basic_user_file /root/.htpasswd;
}

Rewrite URL

Ví dụ bên dưới giả sử bạn muốn rewrite (không phải redirect) đường dẫn http://domain.com/listing/123 thành http://domain.com/listing.php?id=123

rewrite ^/listing/(.*)$ /listing.php?id=$1 last;

(.*) ở đây là regular expression, đại diện cho bất kỳ ký tự nào. Nếu thêm regular expression, bạn sử dụng tương ứng $2, $3

Redirect URL cũ sang URL mới

Redirect /someoldarticle.html sang /some/newarticle.html

rewrite ^/someoldarticle\.html /some/newarticle.html permanent;

Redirect domain cũ sang domain mới

Redirect http://olddomain.com và toàn bộ đường dẫn con sang domain mới http://newdomain.com

rewrite ^(.*) http://newdomain.com$1 permanent;

Redirect IP server sang domain bất kỳ

Mục đích khi truy cập vào IP server, thay vì hiển thị nội dung mặc định của Nginx, người dùng sẽ được tự động redirect đến một địa chỉ website nào đó, ví dụ domain.com.

Bạn hãy mở file cấu hình domain chính, tìm dòng nào có nội dung là listen 80 default_server; thì thay bằng listen 80; (xóa default_server). Tiếp theo, copy paste đoạn cấu hình dưới lên trên cùng file .conf, khởi động lại Nginx là xong:

server {
        listen       80  default_server;
        server_name  _;

        rewrite ^(.*) http://domain.com$1 permanent;
}

Cài WordPress trong Sub-folder

Để chạy được WordPress ở thư mục con, bạn hãy thêm đoạn code sau vào đằng trước block location / { ... }

location /wordpress/ {
    try_files $uri $uri/ /wordpress/index.php?$args;
}

Hiển thị nội dung thư mục

Nếu thư mục không có file index, khi truy cập bạn có thể gặp thông báo lỗi “403 Forbidden“, không hiển thị những file bên trong đó. Để cho phép người dùng xem được thư mục này, bạn hãy chỉnh lại autoindexon.

location / {
    autoindex on;
}

hoặc chỉnh lại là off để không hiển thị nội dung thư mục:

location / {
    autoindex off;
}

Thông thường link 404 sẽ hiển thị thông báo lỗi của Nginx hoặc trang 404 của WordPress. Nếu bạn muốn hiển thị nội dung của trang chủ, có thể thêm đoạn code sau lên trước block location / { ... }

error_page 404 /index.php;

Nội dung index.php sẽ xuất hiện, tuy nhiên header status vẫn là 404. Nếu muốn header 200 thì bạn chuyển đoạn code thành: error_page 404 =200 /index.php;

Ngoài ra có một số tool tự động convert sang rule Nginx bạn có thể tham khảo thêm như:

  1. http://www.anilcetin.com
  2. http://labs.gidix.de/nginx/
  3. https://winginx.com/en/htaccess

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

168 Comments

  1. Kiệt 8 comment

    Hello bạn,

    Mình có vấn đề như này bạn hỗ trợ với

    Mình có 1 lượng user truy cập vào từ social nên nó sẽ có query-string “fbclid=nhiều-ký-tự”

    Nên website mình đôi khi bị đơ do có quá nhiều truy cập khiến CPU phải xử lý

    Không biết có cách nào khiến các query-string đó biến mất không?

    Đây là file conf.d của mình

    server {
    listen 80;
    server_name domain.com http://www.domain.com;
    return 301 https://domain.com$request_uri;
    }
    server {
    listen 443 ssl http2;
    server_name http://www.domain.com;
    return 301 https://domain.com$request_uri;
    ssl_certificate /etc/nginx/paidssl/domain.com/domain.com.crt;
    ssl_certificate_key /etc/nginx/paidssl/domain.com/domain.com.key;
    #ssl_trusted_certificate /etc/nginx/paidssl/domain.com/domain.com.ca;
    }

    server {
    listen 443 ssl http2;
    ssl_certificate /etc/nginx/paidssl/domain.com/domain.com.crt;
    ssl_certificate_key /etc/nginx/paidssl/domain.com/domain.com.key;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_prefer_server_ciphers on;
    include /etc/nginx/conf/ssl-protocol-cipher.conf;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 30s;
    #ssl_trusted_certificate /etc/nginx/paidssl/domain.com/domain.com.ca;
    ssl_buffer_size 1400;
    ssl_session_tickets on;
    add_header Strict-Transport-Security max-age=31536000;
    access_log off;
    access_log /home/domain.com/logs/access_log;
    error_log off;
    error_log /home/domain.com/logs/error.log;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection “1; mode=block”;
    root /home/domain.com/public_html/public;
    include /etc/nginx/conf/ddos2.conf;
    index index.php index.html index.htm;
    server_name domain.com;

    #///////////////////////////////////////////////////////
    # Ban chi co the chon 1 trong 4 rule AAA, BBB, CCC, DDD hoac EEE
    # Ban nen comment cac rule khong su dung thay vi xoa chung vi neu ban su dung wordpress blog
    # Cac dong nay can thiet cho cac chuc nang trong WordPress Blog Tools cua VPSSIM
    # Thuat ngu:
    # Comment – Them dau # vao truoc
    # Uncomment – Bo dau # o truoc cau.
    #///////////////////////////////////////////////////////

    #Chay tat ca cac website (WordPress, Xenforo, Joomla, Phpbb …. ). neu ban su dung rule cua ban,comment dong duoi (them dau # vao truoc) (AAA)
    #include /etc/nginx/conf/all.conf;

    #Neu ban su dung rule cua minh, comment rule o tren. Sau do uncoment (bo dau # ba dong duoi) sau do them rule vao giua. (BBB)
    location / {
    try_files $uri $uri/ /index.php?$query_string;
    }

    # Rule cho wordpress + Plugin wp super cache. Neu ban su dung wordpress va wp super cache, uncomment dong duoi va comment dong AAA phia tren. (CCC)
    #include /etc/nginx/conf/supercache.conf;

    # Rule cho wordpress + Plugin W3 Total Cache. Neu ban su dung wordpress va W3 Total, uncomment dong duoi va comment dong AAA phia tren. (DDD)
    #include /etc/nginx/conf/w3total.conf;

    # Rule cho wordpress + WP-Rocket. Neu ban su dung wordpress va WP-Rocket, uncomment dong duoi va comment dong AAA phia tren. (EEE)
    #include /etc/nginx/conf/wprocket.conf;

    # Config Cache Static Files
    include /etc/nginx/conf/staticfiles.conf;

    #Tang bao mat security, chong sql injection ….(uncoment neu ban muon su dung). Boi vi mot so code website khong su dung duoc voi rule nay, nen mac dinh VPSSIM de tat.
    #Khong duoc xoa dong duoi, neu xoa VPSSIM se khong hoat dong !
    #include /etc/nginx/conf/block.conf;

    # Error Page
    #error_page 403 /errorpage_html/403.html;
    #error_page 404 /errorpage_html/404.html;
    #error_page 405 /errorpage_html/405.html;
    #error_page 502 /errorpage_html/502.html;
    #error_page 503 /errorpage_html/503.html;
    #error_page 504 /errorpage_html/504.html;
    #location ^~ /errorpage_html/ {
    # internal;
    # root /home/domain.com;
    # access_log off;
    #}
    location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_connect_timeout 250;
    fastcgi_send_timeout 250;
    fastcgi_read_timeout 250;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;
    fastcgi_param SCRIPT_FILENAME /home/domain.com/public_html/public$fastcgi_script_name;
    }

    #include /etc/nginx/conf/phpstatus.conf;
    include /etc/nginx/conf/drop.conf;

    }

  2. Tưởng Phùng 8 comment

    Mình muốn chuyển hướng những link cũ có dạng: domain.com/blog/* về domain.com/* thì dùng lệnh nào nhĩ. Bạn nào giúp mình với.

  3. Phi 14 comment

    Mình làm bảo vệ hình ảnh rồi mà vẫn thấy website khác dùng được hình của mình nhỉ

    location ~* \.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|eot|svg|ttf|woff)$ {
    valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. mydomain.com *.mydomain.com;
    if ($invalid_referer) {
    return 403;
    }

    gzip_static off;
    add_header Pragma public;
    add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
    access_log off;
    expires 30d;
    break;
    }

  4. Tommy Nguyen 36 comment

    Tối ưu Browser Caching
    location ~* \.(?:ico|css|js|jpe?g|png|gif|svg|pdf|mov|mp4|mp3|woff)$ {
    expires 7d;
    add_header Pragma public;
    add_header Cache-Control “public”;
    gzip_vary on;
    }

    Nó vẫn báo là chưa caching bạn ơi

  5. Triệu Vỹ 21 comment

    Cho mình hỏi là chỉ cần copy rule bỏ vào cuối file /etc/nginx/conf.d/ là được phải không nhỉ?

    1. Việt Phương Moderator

      Thường là bỏ vào Nginx Conf của domain bạn cần chỉnh sửa nhé

      1. Triệu Vỹ 21 comment

        Có cần lồng vào server {…} không bạn nhỉ? Sao mình thử thêm mấy cái rule từ file htaccess cũ (đã convert sang nginx) của mình vào mà ko được 🙁

          1. Triệu Vỹ 21 comment

            Sao mình redirect link 404 sang trang 404 của mình (hiện tại nó chuyển sang trang chủ) bằng cách thêm error_page 404 /404/index.php; vào trước block location / {
            try_files $uri $uri/ /index.php?$args;
            }
            trong file /etc/nginx/conf.d/domain.com.conf mà nó vẫn redirect về trang chủ vậy nhỉ 🙁 đã restart nginx mà vẫn vậy 🙁

  6. quoc 11 comment

    Cài WordPress trong Sub-folder
    Để chạy được WordPress ở thư mục con, bạn hãy thêm đoạn code sau vào đằng trước block location / { … }

    location /wordpress/ {
    try_files $uri $uri/ /wordpress/index.php?$args;
    }

    Em có thêm đoạn này. Web chạy ok rồi. Nhưng cứ vào wp-admin 1 trong 2 location thì bị many redirect. Còn trang web bài viết vẫn bình thường. Nếu đổi dòng sub folder lên trước thì domain chính bị và ngược lại.
    Cho em hỏi làm sao để fix được nó ạ. Em có dùng cloudflare để chạy SSL

  7. liêmnguyễn 1 comment

    bạn luân cho mình hỏi xí ah
    mình gắn tên miền vào google site mình muốn bỏ www thì mình phải làm cách nào ah

  8. An Khang 22 comment

    Chào bạn!
    Mình muốn hỏi Website mình muốn redirect tất cả link bài viết: domain.com/bai-viet-1.html/amp
    thành domain.com/bai-viet-1.html thì mình sử dụng như thế nào bạn
    Vì mình có dùng Plugins AMP và bây giờ muốn gỡ Plugin đó nhưng nó sẽ lỗi link khi người dùng tìm kiếm từ di động vào.
    Rất mong nhận được giúp đỡ từ bạn
    Cảm ơn bạn !

    1. Việt Phương Moderator

      Bạn thêm phần này vào block của document_root nhé
      location ~ /amp/$ {
      rewrite ^(.*/)amp/$ $1 permanent;
      }

      Rồi restart lại Nginx

  9. Phát 6 comment

    Cho mình hỏi tí ạ:
    Mình cài hocvps trỏ subdomain vào VPS centos7 nếu tạo web trên nginx trên thư public_html của subdomain tương ứng trên VPS centos7 thì đã chạy ok.
    Vấn đề ở đây là mình còn con VPS winserver chạy 1 web ở cổng 8080 ở địa chỉ ip khác. Giờ mình muốn config nginx thế nào để khi gõ trình duyệt subdomain.domain.com thì chạy cái web trên được.
    Mong được chỉ giúp!
    Thanks!

  10. Tài 1 comment

    File nignx của mình sao không chạy được 404.
    Ví dụ mình có link: domain.com/abc.html mình gỏ thêm ví dụ domain.com/abc.html/ thì nó sẽ chạy đúng về 404 mình cần còn nếu mình gỏ domain.com/abc/abcjfjfj… thì nó không về 404 mà làm cho web lỗi giao diện luôn nếu gê chuột vào các link trên web thì sẽ chạy với đường dần đó nối tiếp như là domain.com/abc/linktiep…. bạn nào biết cách xin chỉ giúp cách khắc phục

  11. Thành 23 comment

    Khi mình dùng

    location = / {
    deny 1.2.3.4;
    }

    thì chỉ chặn truy cập trang chủ, các trang con vẫn vào bt, có cách nào chặn hết không cho truy cập trang con luôn không ạ.

    Cám ơn Ad.

    1. Việt Phương Moderator

      Bạn xem phần giới hạn IP truy cập nhé
      location ~ ^/ban-the-cao.html
      {
      }

  12. Huy 26 comment

    Mình cài hocvps script, khi chạy lệnh service nginx restart nó ra kết quả như vầy: Redirecting to /bin/systemctl restart nginx.service. Lỗi này là lỗi gì vậy ad?

    1. Việt Phương Moderator

      Không lỗi gì cả. Đó là của CentOS 7. Hệ thống chuyển lệnh từ service sang systemctl

  13. Tuấn Anh 24 comment

    Làm sao để thêm subdomain bất kỳ vào nginx vậy mọi người, nôm na là wildcard dns.

    Ở tên miền mình đã trỏ A record * và ip của vps

    Khi vào bằng subdomain bất kỳ dạng abc.maindomain.com thì nó hiện lỗi “Trang này hiện không hoạt động”. nhưng khi ping subdomain đó vẫn ra ip của vps.

    Thanks!

  14. QUY 1 comment

    Của em vẫn không hoạt động là do tại sao nhỉ e cover dạng ntn

    # nginx configuration

    location /acc {
    rewrite ^/acc-([0-9]+)$ /view.php?id=$1;
    rewrite ^/acc-([0-9]+)/$ /view.php?id=$1;
    }

    location = /user/login {
    rewrite ^(.*)$ /login.php;
    rewrite ^(.*)$ /login.php;
    }

    location = /user/login/index.php {
    rewrite ^(.*)$ /login.php;
    }

    location = /user/logout {
    rewrite ^(.*)$ /logout.php;
    rewrite ^(.*)$ /logout.php;
    }

    location /lich {
    rewrite ^/lich-su-nap$ /cardhistory.php;
    rewrite ^/lich-su-nap/$ /cardhistory.php;
    rewrite ^/lich-su-mua$ /history.php;
    rewrite ^/lich-su-mua/$ /history.php;
    }

    location /nap {
    rewrite ^/nap-tien$ /napthe.php;
    rewrite ^/nap-tien/$ /napthe.php;
    }

    location /huong {
    rewrite ^/huong-dan-mua-acc/$ /huongdanmuacc.php;
    rewrite ^/huong-dan-mua-acc$ /huongdanmuacc.php;
    rewrite ^/huong-dan-bao-mat-tk$ /huongdanbaomat.php;
    rewrite ^/huong-dan-bao-mat-tk/$ /huongdanbaomat.php;
    }

    location = /login.html {
    rewrite ^(.*)$ /login.php;
    }

    location = /user {
    rewrite ^(.*)$ /fbconfig.php;
    rewrite ^(.*)$ /fbconfig.php;
    }

  15. fususu 35 comment

    Hi

    Mình đang cài cái mautic để gửi mail, nó có 1 file gọi là mtc.js để tracking, ở đường dẫn https://mt.fususu.com/mtc.js và được tự động tạo ra qua php chứ không phải là một file cố định. Tức là trên vps thì file đó sẽ không thấy, nhưng truy cập vào thì vẫn sẽ được. Song phải config nginx rule thế nào đó… (cấu hình của mình ở đây: :https://www.mautic.org/community/index.php/8458-form-won-t-show-via-javascrip-404-not-found/p1#p26181)

      1. fususu 35 comment

        Hôm trước nhờ bạn là fix cái vụ cpu cao, giờ mình xử dc rồi, do xài mấy plugin nặng.
        Còn cái này là mình cài mới tinh trên một vps có sử dụng hocvps script. Song config cho thằng Mautic này mãi ko xong vụ này nên không track mail open được ^^! Cái lỗi mình gặp nhiều người cũng gặp ở trên forum của họ. Mà cái Mautic này gửi mail hay lắm, free mà chất, Luân nghiên cứ xem 🙂

  16. fususu 35 comment

    Mình muốn redirect tất cả các file ảnh bị lỗi 404 (không tồn tại)
    thành 1 file default duy nhất, mình ném cái dode search được trên google này vào vhost mà ko dc 🙁

    server {
    listen 443 ssl http2;

    location ~* \.(png|jpg|gif)$ {
    try_files $uri $uri/ https://fususu.com/default.png;
    }

    }

    1. Việt Phương Moderator

      1. Nhìn rule bạn thì xử lý toàn bộ ảnh rồi đâu phải mỗi ảnh lỗi?
      2. Trong Nginx Conf của bạn có thể còn đoạn khác cũng quy định về png/jpg/gif. Khi đó, bạn phải gộp không nó xung đột

        1. Việt Phương Moderator

          Hiện tại ảnh lỗi của bạn hiển thị như thế nào? Nó là thành 404 Error chứ đâu phải show cái gì

          1. Việt Phương Moderator

            Thế thì bạn dùng bên Redirect Link 404 ý, phần cuối trong bài viết này

  17. Noname 18 comment

    sau khi thêm vào nó gây lỗi thế này Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details. mình dùng centon 7

    1. Việt Phương Moderator

      ystemctl status nginx.service -l và nginx -t hiện kết quả gì bạn

        1. Việt Phương Moderator

          Bạn chạy lệnh check tình trạng Nginx sẽ giúp báo bạn sai ở dòng nào trong Conf nhé, khi đó bạn tự xem sửa lại chứ code gốc của bạn mình không rõ

          1. Noname 18 comment

            mình chỉ thêm dòng
            location ~ .(gif|png|jpe?g)$ {
            valid_referers none blocked .xxx.com;
            if ($invalid_referer) {
            return 403;
            }
            }
            vào là bị lỗi khởi động lại bị vậy

          2. Noname 18 comment

            Nên mình bỏ ra lưu lại khởi động lại thì bt à chỉ có cái là thêm vào bị vậy mà chẳng biết thêm sao cho nó đúng theo ngix nó báo @@

          3. Noname 18 comment

            tìm trên mạng có đứa bị nó nói
            Nguyên nhân là tại dòng này, mình không để ý đến nói:
            #include /etc/nginx/conf/all.conf; mà chẳng hiểu nghĩa là gì 🙁 ai rành mới biết

          4. Việt Phương Moderator

            1. Nginx Conf bạn có dòng #include /etc/nginx/conf/all.conf này đâu mà lỗi do nó được. Chưa kể, việc # thì Nginx đã không đọc dòng đó rồi
            2. Như mình đã nói, sai gì Nginx sẽ báo đó.
            Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details
            Bạn gg dịch cũng hiểu mà, chạy systemctl status nginx.service -l để thêm thông tin

          5. Noname 18 comment

            mình chạy
            systemctl status nginx.service -l
            ● nginx.service – nginx – high performance web server
            Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
            Active: active (running) since Tue 2017-07-25 10:55:38 +07; 53min ago
            Docs: http://nginx.org/en/docs/
            Process: 2784 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
            Process: 2822 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
            Process: 2820 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
            Main PID: 2824 (nginx)
            CGroup: /system.slice/nginx.service
            ├─2824 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.con
            ├─2825 nginx: worker process
            ├─2826 nginx: worker process
            └─2827 nginx: cache manager process

            Jul 25 10:55:38 vultr.guest systemd[1]: Starting nginx – high performance web server…
            Jul 25 10:55:38 vultr.guest nginx[2820]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
            Jul 25 10:55:38 vultr.guest nginx[2820]: nginx: configuration file /etc/nginx/nginx.conf test is successful
            Jul 25 10:55:38 vultr.guest systemd[1]: Started nginx – high performance web server.

            nhưng không hiểu là sai gì vì thêm vào thế 😀 quan trọng là mình không biết thêm chỗ nào hay thế nào cho đúng 😀

          6. Việt Phương Moderator

            nginx: configuration file /etc/nginx/nginx.conf test is successful thì hiện tại có sai gì đâu. Nginx chạy hoàn toàn bình thường

  18. Nguyễn Hoàng Phúc 19 comment

    Mình đã làm theo hướng dẫn bài https://hocvps.com/rule-nginx/ nhưng không hiểu sao lại không chạy được. line 79

    http://imgur.com/a/Nj0Vm

    mình đã thử sửa lại nhưng vẫn chạy không được

    http://imgur.com/a/w1O4z

    đã lưu đúng đường dẫn

    http://imgur.com/a/NnJc0

    nhưng sau khi chạy vẫn báo lỗi “No input file specified” mặc dù đường dẫn file rewrite đúng. Mình sử dụng vpssim. Mong bạn giúp đỡ

          1. Nguyễn Hoàng Phúc 19 comment

            Mình sơ suất quá, cảm ơn bạn. Mình đã sửa lại

            http://imgur.com/a/xdYND

            giờ vào link /ohs.php thì chuyển sang /ohs nhưng nó lại không hiện nội dung của file ohs.php và báo lỗi “No input file specified”

          2. Việt Phương Moderator

            Bạn dùng location /ohs rewrite sang /ohs.php mà path lúc đó là /ohs/ohs.php thì báo lỗi không thấy file là đúng
            Bạn thử rewrite ^/ovh$ /ovh.php last; xem, không cần đặt trong block location

          3. Nguyễn Hoàng Phúc 19 comment

            Sao vẫn không được bạn ơi. Mình đã thử xóa cache rồi

          4. Nguyễn Hoàng Phúc 19 comment

            Mình vừa restart lại server thì chạy rồi. Cảm ơn nhiều bạn nha :))

  19. đức 31 comment

    1) vậy làm sao e biết đc file config của domain nào sẽ có tên là gì? hay nó sẽ có cấu trúc là domain.conf??

    3) tức là e vẫn có thể sử dụng file htaccess đó nhưng phải convert trc? có bài hướng dẫn convert ko em xem với

    e đang chạy folder con kiểu domain/folder, vào được home nhưng khi ấn vào bài viết lại ghi “file not found”.
    -> vậy lỗi này có phải là do file htacess chưa được convert ko?
    -> hoặc là e thấy bảo là wp muốn chạy ở folder con phải config?

    demo lỗi: http://ducmu.info/blog

    1. đức 31 comment

      1) có vẻ đúng cấu trúc như thế thật, e đánh nano /etc/nginx/conf.d/ducmu.info.conf

      nó đã ra file config của domain ducmu.info

      3) e gọi được ra file đó rồi e sửa theo hướng dẫn thành như này, để chạy ở folder ducmu.info/blog nhưng vẫn lỗi khi ấn vào các link bài viết ạ 🙁

      #
      # ducmu.info configuration
      #
      server {
      listen 80;
      server_name ducmu.info;

      location / {
      root /home/ducmu.info/public_html;
      index index.php index.html index.htm;
      try_files $uri $uri/ /index.php?q=$uri&$args;
      }
      location /blog/ {
      try_files $uri $uri/ /blog/index.php?$args;
      }
      error_page 404 /404.html;
      location = /404.html {
      root /home/ducmu.info/public_html;
      }

      error_page 500 502 503 504 /50x.html;
      location = /50x.html {
      root /home/ducmu.info/public_html;
      }

      # pass the PHP scripts to FastCGI server
      #
      location ~ \.php$ {
      root /home/ducmu.info/public_html;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      }
      }

      1. Việt Phương Moderator

        1. Do quy định từng hệ thống. Hoặc nếu hệ thống bạn tự thiết lập thì file Conf bạn hoàn toàn có thể để tên như thế nào cũng được, cho tiện quản lý
        3. File Nginx Conf của bạn không ổn. Quá nhiều root web và block không đóng mở trong block tổng 80 {}
        Ví dụ nếu cấu hình đơn giản thì chỉ là: https://pastebin.com/0wApDMtL

        1. đức 31 comment

          trời ơi sau khi mà thay đoạn code của a vào file config domain thì

          1) em dùng lệnh service nginx restart để khởi động lại nginx

          nhưng mà sau đó web của e die hết ạ 🙁
          IP: http://45.32.120.170
          demo web: http://ducmu.info/blog/

          e cuống quá dùng lệnh sudo yum install nginx để cài lại nginx nhưng vẫn die ạ, e phải làm sao giờ??

          2) ngoài ra e còn bị lỗi file manager của hocvps ko giải nén được file, e định sẽ cài lại hocvps thì e cứ dùng lệnh cài đè lại hay e phải xóa toàn bộ vps đi làm từ đầu ạ?

          3) mà chạy domain ở sub domain theo bài này nói là dạng sub.domain hay là dạng domain/folder đấy ạ??

          cái e cần là dạng domain/folder chạy đc ý

          1. Việt Phương Moderator

            1. Lỗi thông báo như thế này không phán đoán được rồi bạn à. Bạn check service nginx status với nginx -t. Hoặc sau bạn sửa Nginx Conf thì cứ backup trước. Gặp lỗi thì bạn restore lại Conf cũ là được.
            2. Bạn reinstall VPS để cài lại từ đầu nhé. Giải nén sau bạn cứ dùng lệnh trên SSH nhé.
            3. Trong bài viết đề cập rõ ràng là Chạy WordPress ở Sub-folder nhé bạn