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/
Nội dung bài viết
Ngăn những site khác sử dụng hình ảnh
Redirect domain cũ sang domain mới
Redirect IP server sang domain bất kỳ
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 autoindex
là on
.
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; }
Redirect link 404
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ư:
cho e hỏi mấy cái ạ
1) việc sử dụng nano để chỉnh file /etc/nginx/conf.d/ thì file này là file chung của toàn bộ server vps chứ ko phải file riêng của domain nào ạ?
2) giả sử là file chung, giả sử Tối ưu Browser Caching mà e chỉ muốn tối ưu ở domain 1 mà ko muốn làm ở domain 2 thì làm thế nào?
3) e đang chạy sub folder, như vậy là ko dùng file htacess thì e xóa đi cũng ko sao ạ?
nhưng mà e dùng plugin wp-rocket nó yêu cầu copy 1 số code vào file này thì làm sao ạ?
4) Chạy WordPress ở 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 / { … }
-> ý là trong cái file /etc/nginx/conf.d/ sẽ có block location ạ? e đang dùng nano mở file đó ra thấy trắng trơn?
location /demo/ {
try_files $uri $uri/ /demo/index.php?$args;
}
-> Cái “demo” là thay bằng sub folder của e phải ko ạ?vậy làm sao biết đó là sub của domain nào?
1. Bạn tham khảo trước các lệnh Linux cơ bản nhé. https://hocvps.com/lenh-ssh-thong-dung-nhat/ https://hocvps.com/21-cau-lenh-linux-phai-nho/
/etc/nginx/conf.d/
là thư mục, không phải file nên khi bạn edit nó sẽ không hiện nội dung gì. Các file riêng cấu hình từng domain ở bên trong thư mục này. Ví dụ/etc/nginx/conf.d/domain1.conf
và/etc/nginx/conf.d/domain2.conf
Trong trường hợp này bạn liệt kê các file trong thư mục conf.d rồi edit file cần edit
2. Tương tự câu 1
3. Nginx không hoạt động trên .htaccess. Bạn convert rule sang Nginx rồi áp dụng.
4. Tương tự câu 1
Chào mấy anh cho em hỏi với ạ. Em có cái htacces này em dùng web http://www.anilcetin. com/
để đổi qua nginx
# Do not remove this line, otherwise mod_rewrite rules will stop working
php_value default_charset utf-8
Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteCond $1 !^(index.php|assets|css|js|scripts|icons|images|img|media|xml|user_guide|robots.txt|favicon.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
order allow,deny
allow from all
Đã đổi
if ($uri ~ “^system.*”){
set $rule_0 1$rule_0;
}
if ($rule_0 = “1”){
rewrite ^/(.*)$ /index.php/$1 last;
}
if ($uri ~ “^application.*”){
set $rule_1 1$rule_1;
}
if ($rule_1 = “1”){
rewrite ^/(.*)$ /index.php/$1 last;
}
if ($1 !~ “^(index.php|assets|css|js|scripts|icons|images|img|media|xml|user_guide|robots.txt|favicon.ico)”){
set $rule_2 1$rule_2;
}
if (!-f $request_filename){
set $rule_2 2$rule_2;
}
if (!-d $request_filename){
set $rule_2 3$rule_2;
}
if ($rule_2 = “321”){
rewrite ^/(.*)$ /index.php/$1 last;
}
rewrite ^/(.*)$ /index.php?/$1 last;
===============================
Nhưng em bỏ vào config của domain và xóa htaccsec thì ko thể vào được web. kiểu như server bị lỗi. mấy anh ai biết lỗi chổ nào giúp e với ạ 🙁 Em cảm ơn.
Có vấn đề mới hix hix
Trong Directadmin user của em được config như sau
/usr/local/directadmin/data/users/xxxuser/nginx.conf
server
{
listen 45.63.1.xxx:80;
server_name xxxuser.net http://www.xxxuser.net ;
access_log /var/log/nginx/domains/xxxuser.net.log;
access_log /var/log/nginx/domains/xxxuser.net.bytes bytes;
error_log /var/log/nginx/domains/xxxuser.net.error.log;
root /home/xxxuser/domains/xxxuser.net/public_html;
index index.php index.html index.htm;
include /usr/local/directadmin/data/users/xxxuser/nginx_php.conf;
include /etc/nginx/webapps.conf;
include /home/xxxuser/xxxuser.conf;
return 301 https://$host$request_uri;
}
/usr/local/directadmin/data/users/xxxuser/nginx_php.conf
# use fastcgi for all php files
location ~ \.php$
{
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/nginx_limits.conf;
if (-f $request_filename)
{
fastcgi_pass unix:/usr/local/php56/sockets/xxxuser.sock;
}
}
/home/xxxuser/xxxuser.conf;
error_page 500 /error_page/50x.php;
error_page 404 /error_page/40x.php;
location / {
rewrite ^/([a-zA-Z_-]+)-([a-zA-Z_-]+).ken$ /?act=$1&type=$2;
}
location /block.ken {
rewrite ^(.*)$ /error_page/block.php;
}
location /logout.ken {
rewrite ^(.*)$ /logout.php;
}
location /index.html {
rewrite ^(.*)$ /index.php;
}
Khi chạy url /post-one.ken trang chạy bình thường.
Khi chạy file block.ken thì trang trắng (block.php là một file rỗng)
Khi chạy file logout.ken thì nó tự tải file đó về luôn (logout.php chứa code php)
Khi chạy file index.html thì nó hiện ra trang chủ và không tải về như logout.ken
Vậy là e cấu hình bị lỗi ạ? Giúp e với ạ. E mới chuyển qua Nginx dùng ạ.
Anh Admin ơi e muốn rewrite
RewriteRule ^index.html$ index.php [L]
Về nginx thì phải làm sao ạ?
E đang sử dụng directadmin chạy nginx ạ
Rewrite subdomain wordpress trên Nginx như thế nào vậy ban? Hướng dẫn mình với.
Bạn tạo subdomain bằng WordPress Multisite à? Bạn dùng chức năng ParkDomain để add subdomain vào cùng với domain chính
Khi đó bạn có file Nginx Conf của riêng subdomain (trong /etc/nginx/conf.d)
Có file cấu hình Nginx của subdomain thì bạn rewrite như bình thường. Coi nó như 1 site độc lập có cấu hình riêng
Dear Luân!!
Mình đang gặp phải 1 số khó khăn ở Nginx, mong Luân giúp mình với.
Tình hình là website mình như sau:
nhachop.com/shop/san-pham-1
giờ mình muốn chuyển sang nhachop.com/san-pham-1
mình dùng plugin để loại bỏ chử shop thì khi thêm sản phẩm vào và view sản phẩm thì báo lỗi
OOPS! THAT PAGE CAN’T BE FOUND.
Inline image 1
sau đó mình có biên dịch htaccess ra như sau:
# nginx configuration
location /shop {
rewrite ^/shop/(.+)$ /$1 redirect;
}
location / {
rewrite ^(.+)$ /$1 redirect;
rewrite ^(.+)$ /$1 redirect;
rewrite ^(.+)$ /$1 redirect;
rewrite ^(.+)$ /$1 redirect;
rewrite ^(.+)$ /$1 redirect;
rewrite ^(.+)$ /$1 redirect;
rewrite ^(.+)$ /$1 redirect;
rewrite ^(.+)$ /$1 redirect;
}
location /vc_grid_item {
rewrite ^/vc_grid_item/(.+)$ /$1 redirect;
}
location /service {
rewrite ^/service/(.+)$ /$1 redirect;
}
location /look-books {
rewrite ^/look-books/(.+)$ /$1 redirect;
}
location /colection {
rewrite ^/colection/(.+)$ /$1 redirect;
}
Nhưng khi chèn vô /etc/nginx/conf.d/domain… reset lại Nginx thì nó báo lỗi duplicate và ko cho reset.
Vậy làm sao để mình có thể bỏ chử shop mà web vẫn hoạt động bình thường được bạn.
Mong bạn giúp mình với, mình xin chân thành cảm ơn
Ví dụ, rule nó không kết thúc với redirect đâu bạn
rewrite ^/shop/(.+)$ /$1 redirect;
và Nginx reload nó sẽ báo luôn cho bạn biết rule sai dòng nào để bạn bik cần vào sửa.ví dụ là
rewrite ^/shop/(.*)$ /$1 last;
Chèn rewrite url vào Nginx Conf của domain, phần block server có thư mục root của web.
Mình đang muôn redirect url /%postname%.html sang /%postname%/ giờ e phải thêm rule như thế nào vậy ạ
Giúp mình với..
Đây là file htaccess:
—————————
RewriteEngine on
RewriteRule ^country-study-([0-9]+).html$ country_study.php?id=$1
RewriteRule ^country-study-d-([0-9]+).html$ country_study_d.php?id=$1
RewriteRule ^country-study-detail-([0-9]+).html$ country_study_detail.php?id=$1
RewriteRule ^visa-detail-([0-9]+).html$ visa-detail.php?id=$1
RewriteRule ^register-events-([0-9]+).html$ register-events.php?id=$1
RewriteRule ^latest-news-detail-([0-9]+).html$ latest_news_detail.php?id=$1
RewriteRule ^(.*).html$ $1.php
—————————————–
Còn dưới đây là rule config trên Nginx. Mình không hiểu sao khi bấm Read More (href tới latest-news-detail-2.html) nó hiện 404 Nginx not found.
**********
# nginx configuration
location /country {
rewrite ^/country-study-([0-9]+).html$ /country_study.php?id=$1;
rewrite ^/country-study-d-([0-9]+).html$ /country_study_d.php?id=$1;
rewrite ^/country-study-detail-([0-9]+).html$ /country_study_detail.php?id=$1;
}
location /visa {
rewrite ^/visa-detail-([0-9]+).html$ /visa-detail.php?id=$1;
}
location /register {
rewrite ^/register-events-([0-9]+).html$ /register-events.php?id=$1;
}
location /latest {
rewrite ^/latest-news-detail-([0-9]+).html$ /latest_news_detail.php?id=$1;
}
location ~ ^/ {
rewrite ^/(.*).html$ /$1.php;
}
****
Mình cảm ơn
Mình đang gặp lỗi link thân thiện khi cài shop bằng WordPress trên nginx. Xin mọi người chỉ giúp. Cảm ơn
https://hoidap.thachpham.com/chu-de/loi-woocomerce-voi-nginx-khi-permalinks.20380/
Bạn để trong thư mục demo đúng không? Phần bạn thêm vào, bạn thử
location /demo/ {
xem?đã fixx dc rồi, bỏ ngoài thư mục gốc mới dc, bỏ trong thu mục con thì bị lỗi, thanks mod nhé
mình cũng đang bị trường hợp này. Giống y chang. Bạn fix dc thì chỉ mình với nha, chứ cả tuần rùi vẫn chưa ra cách.
Oki bạn mai mình sẽ test theo hướng dẫn
Vậy bây giờ mình có cần sao lưu toàn bộ dữ liệu của web để cài lại vps mới rồi up lại không bạn? Nếu cứ để nguyên như hiện nay thì nó có làm sao ko, mình vẫn thấy web đang chạy bình thường.
Theo như bạn hướng dẫn là mình vào file nginx rồi tạo cái acb.com.conf thay cho hocvps.com.conf phải không. Bên trong file abc.com.conf mình đặt code như thế nào trong cổng 80 nhỉ?
Bạn thêm website bằng HocVPS menu sẽ tự tạo đầy đủ cả thư mục web và Nginx conf cho bạn nhé. Khi đó bạn chỉ cần up source code vào thư mục web với chỉnh sửa Nginx conf (nếu cần) thôi
Cảm ơn bạn hồi âm. Web mình cài bằng hocvps của bạn mà, nhưng mình quên gõ domain để mặc định, giờ mình để nguyên như vậy chỉ sửa conf thôi được chứ. Mình chưa học cách sao lưu code và data từ nginx nên ngại up ra up vào. Nếu sửa file conf thì sửa ở cổng 80 thôi hả bạn
Nếu thế bạn không cần sửa gì cả. Bạn chạy Hocvps menu để thêm website là domain của bạn thôi. Domain hocvps để nguyên đó chỉ để Quản lý HocVPs Script
Bạn ơi, khi mình vào etc/nginx/conf.d thì có 1 cái file là hocvps.com.conf (liệu mình có cài nhầm gì không nhỉ, nó là domain của hocvps chứ không phải là domain của mình). Tiếp tục dùng Notepad truy cập vào file đó thì ra danh sách code thì thấy có 2 cổng, một cổng 80 và một cổng của mình tạo (abc). Vậy đoạn code dưới đây chèn vào cổng nào?
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;
}
Hiện nay, web mình đã có trang 404 của wp tạo nhưng trong WMT vẫn báo lỗi 404. Mình muốn đặt lệnh redirect 301 toàn bộ các link 404 về trang chủ hoặc 1 trang nào đó, bạn cho xin đoạn code, mình xem trên các web khác viết ông chẳng bà chuộc không ra sao cả
Trong file hocvps.com.conf của mình toàn code của hocvps.com như thế này có đúng không bạn
server {
server_name “~^www\.(.*)$” ;
return 301 $scheme://$1$request_uri ;
}
server {
listen 80;
server_name http://www.hocvps.com;
rewrite ^(.*) http://hocvps.com$1 permanent;
}
server {
listen 80 default_server;
# access_log off;
access_log /home/hocvps.com/logs/access.log;
# error_log off;
error_log /home/hocvps.com/logs/error.log;
root /home/hocvps.com/public_html;
index index.php index.html index.htm;
server_name hocvps.com;
error_page 404 /index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
_File
hocvps.com.conf
là file cấu hình Nginx mặc định khi lúc cài HocVPS bạn không nhập tên miền cụ thể.Cấu hình phần này không có tác dụng gì với domain của bạn. Bạn sửa file Nginx conf tương ứng với domain của bạn nhé
_Bạn sửa phần port 80 quy định root và server_name của site nhé. Trong cấu hình Nginx của HocVPS mặc định cũng có cấu hình phần location cho các file .js, mp3,… Bạn đọc sẽ thấy, gần cuối
A luân cho em hỏi là khi redirect domain cũ sang domain mới mà em có cài ssl cho domain cũ rồi thì chèn đoạn code kia vào trong file .conf như thế nào ạ?
Bạn chèn
rewrite ^(.*) http://newdomain.com$1 permanent;
vào các block 80 và 443.Bình thường, chỉ cấu hình SSL thì bạn sẽ redirect http:// http://www về HTTPS. https://www. sẽ về HTTPS. Cuối cùng chỉ tồn tại duy nhất HTTPS
Giờ thì bạn set toàn bộ các block đều redirect về domain mới
server {
listen 443 ssl http2;
server_name http://www.domaincu.com;
rewrite ^(.*) https://domainmoi.com$1 permanent;
}
server {
listen 80;
server_name domaincu.com http://www.domaincu.com;
rewrite ^(.*) https://domainmoi.com$1 permanent;
}
Như thế này đúng không ạ?
Domain mới cũng cài SSL rồi à bạn?
Dạ đúng rồi ạ! E làm thế có sai gì ko ạ?
Bỏ http đi. Nginx Conf thường có 3 block chứ nhỉ, gồm 2 block 443 và 1 block 80. Làm như bên dưới
server {
listen 443 ssl http2;
server_name domaincu.com;
rewrite ^(.*) https://domainmoi.com$1 permanent;
}
server {
listen 80;
server_name domaincu.com www.domaincu.com;
rewrite ^(.*) https://domainmoi.com$1 permanent;
}
server {
listen 443 ssl http2;
server_name www.domaincu.com;
rewrite ^(.*) https://domainmoi.com$1 permanent;
}
Nếu chỉ có 2 block thì làm như dưới
server {
listen 443 ssl http2;
server_name domaincu.com www.domaincu.com;
rewrite ^(.*) https://domainmoi.com$1 permanent;
}
server {
listen 80;
server_name domaincu.com www.domaincu.com;
rewrite ^(.*) https://domainmoi.com$1 permanent;
}
Quên mất: domain cũ có cần thêm https k ad nhỉ? Vì domain cũ e cũng cài ssl
Không cần, listen 443 đã tương đương https rồi. Như khi em không gõ gì là port 80 HTTP
Vâng, để em làm, có gì không đc a giúp e tiếp nhé.
Cảm ơn a nhiều. Em làm được rồi a à!
File default.conf cua em
server {
error_page 404 = /index.php;
error_page 403 = /index.php;
error_page 500 = /index.php;
error_page 502 = /index.php;
error_page 503 = /index.php;
error_page 504 = /index.php;
listen 80 default_server;
access_log off;
error_log off;
root /home;
index index.php index.html index.htm;
location / {
rewrite ^/(.*).html$ /$1.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
error_page 404 = /404.php;
error_page 403 = /403.php;
listen 80;
access_log off;
error_log off;
root /var/www/html;
index index.php index.html index.htm;
server_name *.com *.net *.org *.biz *.info *.us *.asia *.name *.in *.me *.tv *.mobi *.club *.co *.cc *.cz *.ch *.nl *.pl *.mx *.uk *.pro *.vip *.tk *.ga *.cf *.ml *.gq *.xyz *.top *.bid *.pw *.win *.online *.site *.tech *.trade *.space *.press *.science *.webcam *.accountant *.loan *.racing *.faith *.party *.cricket *.website *.review *.vn *.diet *.pics *.click *.link *.uno *.date *.download;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
# This is cool because no php is touched for static content.
# include the “?$args” part so non-default permalinks doesn’t break when using query string
try_files $uri $uri/ /index.php?$args;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Chuyển từ https sang http thế nào anh?
Kiểm tra file nginx conf của bạn đoạn nào để https sửa thành http
Hola a!
Cho e hỏi muốn redirect từ domain.com/cat/post.html sang domain.com/cat.post ( non .html) thì dùng lệnh nào trong nginx ạ?
Trước e dùng link dạng .html nên giờ chuyển sang non .html, các bài chia sẻ và index trong google nó đều về 404, buồn ghê. Em dùng hocvps script ạ.
Bạn cho link cụ thể đi để mình xem.
cat
sẽ tùy biến như thế nào hay cố địnhTrong permalink của wp là…/%category%/%postname% ạ.
Thực ra là trước đây em có thêm đuôi /%category%/%postname%.html nên các post em chia sẻ trên mạng xh đều có đuôi .html. Giờ em dùng non-.html nên khi click các link cũ nó đều về 404.
Em muốn hỏi cách để nginx redirect toàn bộ các link có .html về bài viết tương ứng nhưng không có .htm .
Cảm ơn anh!
Rule cụ thể theo cấu trúc link chứ không phải auto kiểu .html về non-html là được đâu bạn. Khi làm thế, các phần không phải post cũng bị đổi theo rất mệt
Anh luân ơi giúp e chút với
File htaccess bên host của e là thế này
RewriteEngine on
RewriteCond %{HTTP_HOST} !domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
RewriteRule ^video/([0-9]+)/(.*).html$ view.php?url=$2&id=$1
RewriteRule ^xvideos/([0-9]+)/(.*).html$ view_xvideos.php?url=$2&id=$1
RewriteRule ^page/([0-9]+)$ index.php?page=$1
RewriteRule ^page/([0-9]+)/$ index.php?page=$1
RewriteRule ^tag/([a-zA-Z0-9_-]+).html$ search.php?q=$1&ok=a
RewriteRule ^tag/([a-zA-Z0-9_-]+)/([0-9]+)$ search.php?q=$1&ok=a&page=$2
RewriteRule ^category/([a-zA-Z0-9_-]+)$ category.php?url=$1
RewriteRule ^category/([a-zA-Z0-9_-]+)/$ category.php?url=$1
RewriteRule ^category/([a-zA-Z0-9_-]+)/page/([0-9]+)$ category.php?page=$2&url=$1
RewriteRule ^category/([a-zA-Z0-9_-]+)/page/([0-9]+)/$ category.php?page=$2&url=$1
RewriteRule ^sitemap_index.xml$ sitemap_index.php
RewriteRule ^sitemap_index-([0-9]+).xml$ sitemap_index.php?page=$1
RewriteRule ^sitemap.xml$ sitemap.php
RewriteRule ^sitemap-([0-9]+).xml$ sitemap.php?page=$1
RewriteRule ^sitemaptag.xml$ sitemap-tag.php
RewriteRule ^sitemaptag-([0-9]+).xml$ sitemap-tag.php?page=$1
RewriteRule ^top.html$ top.php
ErrorDocument 404 /?act=404
E đã thử cài lại trong /etc/nginx/conf.d nhưng không được
A giúp e fix cho với đúng cấu hình như thế này chạy được được trên nginx ko ạ.
Cảm ơn anh
Bạn đã convert sang rule Nginx thế nào rồi, gửi mình xem?
Không được Luân ơi 🙁 ko biết sai ở chỗ nào
# nginx configuration
error_page 404 /404.html;
location / {
if ($http_host !~ “^www.domian.com$”){
rewrite ^(.*)$ http://www.domian.com/$1 redirect;
}
if (!-e $request_filename){
rewrite index.php / break;
}
rewrite ^/([a-zA-Z0-9-]+).rss$ /rssnoidung.php?alias=$1;
rewrite ^/([a-zA-Z]+)-([a-zA-Z0-9-%,]+)-([0-9]+)x([0-9]+).([a-zA-Z0-9]+)$ /xuli/timthumb.php?src=hinhanh/$1/$2.$5&w=$3&h=$4;
rewrite ^/([a-zA-Z]+)-([a-zA-Z0-9-%,]+)-w([0-9]+).([a-zA-Z0-9]+)$ /xuli/timthumb.php?src=hinhanh/$1/$2.$4&w=$3;
rewrite ^/([a-zA-Z]+)-([a-zA-Z0-9-%,]+)-h([0-9]+).([a-zA-Z0-9]+)$ /xuli/timthumb.php?src=hinhanh/$1/$2.$4&h=$3;
rewrite ^/([0-9]+)__([a-zA-Z0-9]+).html /index.php?mucluc=kichhoattaikhoan&user_id=$1&user_random=$2;
rewrite ^/([a-zA-Z0-9-]+).html$ /index.php?mucluc=loaitinsanpham&alias=$1;
rewrite ^/([a-zA-Z0-9-]+)/page([0-9]+).html$ /index.php?mucluc=loaitinsanpham&alias=$1&page=$2;
rewrite ^/([a-zA-Z0-9-]+)$ /index.php?mucluc=gianhang&useralias=$1;
rewrite ^/([a-zA-Z0-9-]+)/page([0-9]+)$ /index.php?mucluc=gianhang&useralias=$1&page=$2;
rewrite ^/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ /index.php?mucluc=gianhang&useralias=$1&alias=$2;
rewrite ^/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/page([0-9]+)$ /index.php?mucluc=gianhang&useralias=$1&alias=$2&page=$3;
}
location /404 {
rewrite ^/404.html /404.htm break;
}
location /index {
rewrite ^/index.html /index.php;
}
location = /admin {
rewrite ^(.*)$ /admin/index.php;
}
location = /en {
rewrite ^(.*)$ /index.php?nn=en;
}
location /page {
rewrite ^/page([0-9]+).html /index.php?page=$1;
}
location /xulidangnhap {
rewrite ^/xulidangnhap.html /xulidangnhap.php;
}
location = /sitemap.xml {
rewrite ^(.*)$ /home/sitemap/sitemapxml.php;
}
location = /sitemap.html {
rewrite ^(.*)$ /index.php?mucluc=sitemap;
}
Trường hợp này bạn liên hệ mail, nói cụ thể case nhé. Mình support cho.
Ừ bình thường nó sinh ID như vậy thì plugin nó cứ “loading…”, không hiển thị được file pdf, html của mình. Cho nên nếu share link tới người khác mà có cả ID của plugin thì rất bất tiện, vì nó không show file pdf của mình nhúng vào bài viết.
Mình muốn rewrite lại thì như thế nào nhỉ? Bạn chỉ dùm mình được không?
Cám ơn bạn!
Hi bạn Luân!
Cho mình hỏi chút là:
site của mình dùng plugin đọc file pdf và show lên, thì url nó tự sinh ra ID sau dấu #, kiểu như:
domain.com/bai-viet#ID
Nếu click vào link này thì các file pdf không show được, mà ở chế độ waiting….
Còn nếu bỏ #ID thì load bình thường.
Ví dụ: http://thuvienthaythonglac.net/index.php/thu-muc-tu-lieu/item/523-chuyen-nhan-qua-lieu-phap-26-10-2001#.WEAEih-g_2E
Mình muốn bỏ cái #ID thì làm thế nào?
Hoặc bất cứ link nào dạng domain.com/bai-viet#ID sẽ được tự động chuyển về domain.com/bai-viet thì làm sao?
Website mình dung NGINX
Cám ơn bạn Luân nhé!
Có rule rewrite URL nhưng mình thấy vấn đề của bạn là link tích hợp ở plugin chứ không phải link bài viết ở address mà.
server {
listen 80 default_server;
# access_log off;
access_log /home/dm.vn/logs/access.log;
# error_log off;
error_log /home/dm.vn/logs/error.log;
root /home/dm.vn/public_html;
index index.php index.html index.htm;
server_name dm.vn;
location / {
try_files $uri $uri/ /index.php?$args;
}
location = /wp-login.php{
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
}
}
File cấu hình nginx của domain em là như thế, em thêm đoạn location = /wp-login.php{
allow IP Của EM;
deny all;
} vào để giới hạn ip đăng nhập mà sao ip nào vào wp-login.php cũng bị 403 hết anh?
Bạn chuyển lên trên location / { } để nó được xử lý trước nhé.
server {
listen 80;
server_name http://www.dm.vn;
rewrite ^(.*) http://dm.vn$1 permanent;
}
server {
listen 80 default_server;
# access_log off;
access_log /home/dm.vn/logs/access.log;
# error_log off;
error_log /home/dm.vn/logs/error.log;
root /home/dm.vn/public_html;
index index.php index.html index.htm;
server_name dm.vn;
location = /wp-login.php {
allow 116.102.220.67;
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
}
Vẫn không được anh, hjx.
Ở dòng location bạn bỏ dấu = đi
server {
listen 80;
server_name http://www.dm.vn;
rewrite ^(.*) http://dm.vn$1 permanent;
}
server {
listen 80 default_server;
# access_log off;
access_log /home/dm.vn/logs/access.log;
# error_log off;
error_log /home/dm.vn/logs/error.log;
root /home/dm.vn/public_html;
index index.php index.html index.htm;
server_name dm.vn;
location /wp-login.php {
allow 116.102.220.67;
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
}
Nếu bỏ dấu = ở location thì ip nào vào cũng được a. Hjx
Format đúng của nó không có dấu = mà. Bạn xem cả bài viết này có chỗ nào có dấu = không?
Mình đang dùng NginX (Vesta CP), nhưng bị vướng lỗi 404 Page Not Found, Anh Luân có thể giúp mình không?, cụ thể:
Vào http://khaosat.dtcc.edu.vn ok, nhưng chọn link:
http://khaosat.dtcc.edu.vn/index.php/421636?lang=vi
thì Trang bị lỗi 404 Page Not Found
Lúc trước minh dùng Apache (Vesta CP_ thì web chạy ok , khi chuyển dùng NginX (Vesta CP) thì bị lỗi 404 Page Not Found (mặc dù cấu hình CSDL ok)
Khi chuyển sang Nginx bạn phải cấu hình lại đường dẫn tĩnh đó, xem đoạn code file .htaccess là gì để chuyển sang tương ứng.
Anh Luân xem giúp cấu hình file nginx.conf cho web chạy em:
1. File .htaccess, có nội dung:
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
# otherwise forward it to index.php
RewriteRule .* index.php [L]
# General setting to properly handle LimeSurvey paths
# AcceptPathInfo on
2. File nginx.conf, có nội dung:
server {
listen 10.176.173.8:80;
server_name khaosat.dtcc.edu.vn http://www.khaosat.dtcc.edu.vn;
root /home/khaosat/web/khaosat.dtcc.edu.vn/public_html;
index index.php index.html index.htm;
access_log /var/log/nginx/domains/khaosat.dtcc.edu.vn.log combined;
access_log /var/log/nginx/domains/khaosat.dtcc.edu.vn.bytes bytes;
error_log /var/log/nginx/domains/khaosat.dtcc.edu.vn.error.log error;
location / {
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
expires max;
}
location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9009;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
error_page 403 /error/404.html;
error_page 404 /error/404.html;
error_page 500 502 503 504 /error/50x.html;
location /error/ {
alias /home/khaosat/web/khaosat.dtcc.edu.vn/document_errors/;
}
location ~* “/\.(htaccess|htpasswd)$” {
deny all;
return 404;
}
include /etc/nginx/conf.d/phpmyadmin.inc*;
include /etc/nginx/conf.d/phppgadmin.inc*;
include /etc/nginx/conf.d/webmail.inc*;
include /home/khaosat/conf/web/nginx.khaosat.dtcc.edu.vn.conf*;
}
Anh xem giúp, cám ơn anh nhiều!
Cấu hình Nginx của bạn có vấn đề gì đó rồi. Xem lại đoạn cấu hình mặc định của mình trong bài này coi: https://hocvps.com/huong-dan-cai-dat-lemp-linux-nginx-mariadb-php-tren-centos/
Luân ới!
Sao mình viết
rewrite ^/van-phong\.html /van-phong-cho-thue/ permanent; thì được. Còn viết
rewrite ^/van-phong-cho-thue\.html /van-phong-cho-thue/ permanent; thì nó không chạy vậy bạn @@
Chắc chưa reload Nginx rồi bạn.
Reload rồi bạn 🙁
Thế thì mình chịu rồi 🙁
Luân ơi mình muốn redirect 301 tất cả các link trong thư mục A sang thư mục B thì làm thế nào?
VD: chuyển tất cả các link trong http://domain.com/A/ sang http://domain.com/B/
Giúp mình với.
Mình dùng hocscrip.
Bạn thử rule này coi sao:
[emerg] “server” directive is not allowed here in /etc/nginx/nginx.conf:63
Lỗi như này là sao anh Luân ơi, cái “server” nó k chịu, em chèn cái
server {
server_name mydomain.com;
rewrite ^(.*) $scheme://www.mydomain.com$1 permanent;
}
server { }
bạn phải để trong thư mục cấu hình/etc/nginx/conf.d/
chứ không được để trong file nginx.conf nhé.cách nào để khắc phục lỗi này bạn:
500 Internal Server Error
Nginx-VPSSIM
Bạn ơi cho mình hỏi! Mình viết web PHP và được người anh cho dùng ké vps làm hosting, nên giờ mình phải cài bộ nginx stack để làm localhost nên mình không biết file .conf phải đặt trong thư mục nào và cần cấu hình gì cho nó không. Bạn giúp mình với nhé
Tùy VPS cài đặt như thế nào nữa bạn
mình thêm vào mục /etc/nginx/conf.d/abc.xyz.conf
server {
……….
location ~ \.(jpe?g|png|gif)$ {
valid_referers none blocked abc.xyz *.abc.xyz;
if ($invalid_referer) {
return 403;
}
}
====> không sử dụng được cho website XYZ thì phải ?? Hình lấy từ web xyz qua bên blogspot hoặc những web khác đều hiện bình thường hết. Không biết ad có thử qua chưa, tốn băng thông quá
Luân giúp mình với, hic, đoạn rewrite nginx này hoạt động tốt ở domain.com (main folder), nhưng lại không hoạt động dc ở folder con : domain.com/test/
Đã google và thử nhìu cách nhưng vẫn ko dc. Thanks
location /test/ {
rewrite ^/index.html$ /index.php;
rewrite ^/browse.html$ /category.php;
rewrite ^/browse-(.*)-videos.html$ /category.php?cat=$1;
rewrite ^/browse-(.*)-videos-([0-9]+)-(.*).html$ /category.php?cat=$1&page=$2&sortby=$3;
rewrite ^/videos.flv(.*)$ /videos.php$1;
rewrite ^/videos.mp4(.*)$ /videos.php$1;
rewrite ^/register.html$ /register.php;
rewrite ^/contact_us.html$ /contact_us.php;
rewrite ^/edit_profile.html$ /edit_profile.php;
Sorry, mình làm dc rồi, dùng https://winginx.com/en/htaccess để convert lại
Bạn vẫn phải quy định folder trong câu lệnh rewrite, viết lại như ví dụ này nhé:
Muốn chỉ tên miền của mình chạy được file php còn bỏ sang tên miền khác không chạy được thì cấu hình như thế nào nhỉ?
Muốn không cho sử dụng file php ngoài tên miền của mình, dùng trên tên miền khác thì không chạy được thì cấu hình như nào bạn nhỉ???
Bạn có thể tạo riêng một virtual host của tên miền đó và cấu hình lại.
Anh Luân cho em hỏi,
em dùng tool này để converd file .httaccess của Opencart
thì nó ra đoạn này :
# nginx configuration
location ~ .*\.(ico|gif|jpg|jpeg|png|js|css) {
}
autoindex off;
location / {
if (!-e $request_filename){
rewrite ^/(.*)\?*$ /index.php?_route_=$1 break;
}
if ($query_string ~ “^route=common/home$”){
rewrite ^/index.php$ http://boomart.com.vn/? redirect;
}
}
location = /sitemap.xml {
rewrite ^(.*)$ /index.php?route=feed/google_sitemap break;
}
location = /googlebase.xml {
rewrite ^(.*)$ /index.php?route=feed/google_base break;
}
location /system {
rewrite ^/system/download/(.*) /index.php?route=error/not_found break;
}
location ~ (?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt)) {
deny all;
}
"
nhưng khi em chèn vào file conf của em rồi Reboot lại host, xong thì vô nó báo là
Không thể truy cập trang web này
boomart.com.vn đã từ chối kết nối.
Tìm kiếm boomart vn admin index trên Google
ERR_CONNECTION_REFUSED
anh có thể chỉnh lại giúp em dc ko
Có khả năng cấu hình Nginx sai, bạn thử lệnh
nginx -t
xem thế nào?em sử dụng script Hocvps mà đâu có hình gì đâu
chỉ dùng mặc định, rồi add cái file httaccess đã conver qua nginx vô là báo lỗi từ đầu đến cuối e đã thử xóa từng ít 1 rồi vẫn vậy
Tại em dùng Opencart nếu không có file httaccess thì các sản phẩm không hiển thị tên riêng, mà nó ra tên mặc định không tốt cho Seo
Mình thấy mấy tool convert tự động toàn lỗi thôi, bạn nên tìm kiếm các cấu hình có sẵn được chia sẻ trên mạng mà dùng ấy, khả năng chạy được.
Chỉnh sửa những file này ở đâu bạn, mình cài HocVPS Script khi vào link /etc/nginx/conf.d/ thì ko thấy cái gì liên quan đến bài viết bạn nói hết
Link ảnh chụp: http://i.imgur.com/dAPjrYJ.jpg
Bạn phải kết nối SSH hoặc sFTP để edit, ai lại truy cập thẳng thế kia.
Anh Luân ơi, nếu em muốn cho phép truy cập file index.php còn lại cấm truy cập tất cả các file khác có đuôi .php thì viết thế nào anh? Em thử mãi mà chẳng được 🙁
Sao lại cấm kiểu này làm gì bạn nhỉ 😀
Tại để đảm bảo là lỡ có bị up shell lên server thì vẫn k dùng đc đó anh Luân. Ngoài ra còn nhiều lí do khác nữa.
mình gõ lệnh nano /etc/nginx/conf.d/
nhưng trong đó không có gì. trống trơn luôn ad
Ko hiểu bạn hỏi gì luôn
ý mình là mình làm theo bướ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/”
nhưng khi mình gõ dòng “/etc/nginx/conf.d/” hoặc “nano /etc/nginx/conf.d/”
Thì nó không có gì trong file đó hết
http://i.imgur.com/GdzYsYA.png
Có phải mình cài lỗi không admin.
Cảm ơn.
Bạn dùng sai rồi, làm gì có 2 lệnh như bạn dùng. Thử
ls /etc/nginx/conf.d/
xem nó ra cái gì nhé.Luân ơi, cho hỏi. Làm sao để chặn leech ảnh từ VPS dùng nginx nhỉ? Bên Apache thì mình bít rồi…
Có phần Ngăn những site khác sử dụng hình ảnh đó bạn?
Em cài 1 số plugin bên WordPress, thì được yêu cầu chỉnh sửa file nginx. E dùng lệnh
—– Nano -w /etc/nginx/nginx.conf ——-
Sau đó thêm nội dung, save, khởi động lại đúng không anh Luân???
P/s: nó gửi cho 1 đoạn mã khá dài, có cách nào copy paste vào file nginx không ???? (nhiều quá sợ gõ nhầm chạy không được @@)
Đúng rồi bạn. Ngoài ra bạn có thể login sFTP, down file đó xuống chỉnh sửa bằng Notepad rồi up đè lên lại cho dễ thao tác.
Cho mình hỏi là mình sử dụng SSL cho website chạy trên Nginx, thì thư mục upload source của web vẫn là private_html phải không ? vì mình upload source web vô private_html thì chạy web báo not found. Cảm ơn.
Thư mục vẫn là public_html nhé bạn. Cái này trong file cấu hình nginx quy định.
Cảm ơn Luân
Chào luân !
Mình muốn chuyển tất cả các link dạng
http://domain.com/doc-truyen/id/id/id.html (ex: http://domain.com/doc-truyen/1/2/3.html)
sang 1 link duy nhất dạng
http://domain.com/top.html
thì làm cách nào ạ, thanks
Toàn những rule hay, cám ơn Luân nhiều nhé!
Mình đang tính chuyển qua nginx cho web của mình, nếu dùng wordpress thì có phải config gì đặc biệt cho nginx ko nhỉ?
WordPress thì dùng luôn, không có config gì đặc biệt nhé.