banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: lyphuong  XML
Profile for lyphuong Messages posted by lyphuong [ number of posts not being displayed on this page: 0 ]
 

vd_ wrote:
bạn nên chia sẻ thêm là bạn giải quyết như thế nào, các bạn khác cũng như tôi sẽ học hỏi được thêm các case để xử lý. 


Khi dns trỏ abc.com.vn và def.com.vn vào (2 máy chủ web) 192.168.115 và 192.168.2.119 các máy trong lan dùng browser truy cập vào 2 site (đi thẳng đến máy webserver) không đi qua máy nginx front end proxy (Các tập tin log nginx sẽ không ghi vào được dung lượng là 0)

Khi dns trỏ abc.com.vn và def.com.vn vào 192.168.1.2 (máy nginx front end proxy, iptables) các máy trong lan dùng browser truy cập vào 2 site đi qua máy nginx front end proxy (Các tập tin log nginx nội dung sẽ được ghi)

Đến thời điểm này phần cấu hình nginx hoạt động tốt (nginx.conf, proxy.conf )

Nhưng các browser từ bên ngoài Internet vẫn không truy cập 2 site với tên miền abc.com.vn và def.com.vn.

Vấn đề xét đến các rule của iptables và đây là rule cuối cùng mình thêm thì các browser từ bên ngoài Internet truy cập 2 site.

Code:
-A PREROUTING -p tcp -dport 80 -j REDIRECT --to-ports 80


Rule này nó đè làm mất tác dụng các rule để transparent proxy with Squid


Mình tóm lại trường hợp và cách giải quyết để các bạn tham khảo: (Public 2 site ở 2 server khác nhau qua Internet)

- Có 01 public IP
- Và 02 domain (ABC và XYZ) cùng map về Public IP ở trên
- Mỗi domain nằm trên 1 server khác nhau.

Cài đặt và cấu hình server Firewall:
1. Squid để các máy trong lan truy cập Internet.
2. Cài đặt và cấu hình nginx (nginx multiple backend web servers) như trên.
3. Thiết lập rule cần thiết cho iptables và thêm rule.

Code:
-A PREROUTING -p tcp -dport 80 -j REDIRECT --to-ports 80

vd_ wrote:
- khi vào 2 site bằng browser thì hiện ra cái gì?
- dns đã trỏ abc.com.vn và def.com.vn vào 192.168.1.2 chưa? 


Vấn đề đã giải quyết được rồi, cám ơn vd_quanta đã định hướng và giúp đỡ cho mình hoàn thành vụ này. làm việc với mấy vụ này dễ bị điên wá !
Thank mọi người !

vd_ wrote:
1. Thông báo lỗi của nginx là gì?
2. Bạn dùng upstream server1 {... } & upstream server2 {... } rồi reference đến server1 và server2 trong proxy_pass thay vì dùng full domain như hiện tại. Theo tui đoán thì khi bạn dùng proxy_pass http://def.com.vn; thì nginx không biết bạn muốn pass đến server def.com.vn thực tế hay phần upstream def.com.vn trước đó.
 



Các tập tin log sao nó không ghi vào được dung lượng là 0:
Code:
-rw-r--r--. 1 nginx root 0 Aug 20 21:09 access.log
-rw-r--r--. 1 nginx root 0 Aug 26 21:48 error.log


Mình sửa lại upstream bằng tên và proxy_pass theo tên proxy_pass http://thuvien nhưng vẫn chưa có kết quả khả quan.

Code:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream apachephp {
server 192.168.2.115:80;
}
server
{
listen 192.168.1.2:80;
server_name abc.com.vn;
location / {
proxy_pass  http://apachephp;
include /etc/nginx/conf.d/proxy.conf;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream thuvien {
server 192.168.2.119:80;
}
server
{
listen 192.168.1.2:80;
server_name def.com.vn;
location / {
proxy_pass  http://thuvien;
include /etc/nginx/conf.d/proxy.conf;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

quanta wrote:
@lyphuong: Với Nginx, phần cấu hình cho def.com.vn trỏ về 2.119 đâu bạn? 


Mình có sửa lại, đây là phần cấu hình hiện tại

Code:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream abc.com.vn {
server 192.168.2.115:80;
}
server
{
listen 192.168.1.2:80;
server_name abc.com.vn;
location / {
proxy_pass  http://abc.com.vn;
include /etc/nginx/conf.d/proxy.conf;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream def.com.vn {
server 192.168.2.119:80;
}
server
{
listen 192.168.1.2:80;
server_name def.com.vn;
location / {
proxy_pass  http://def.com.vn;
include /etc/nginx/conf.d/proxy.conf;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}


/etc/nginx/conf.d/proxy.conf

Code:
proxy_wwwect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100M;
client_body_buffer_size 1m;
proxy_intercept_errors on;
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 256 16k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;
proxy_read_timeout 300;

Tình trạng của mình đúng như bạn zinxu mô tả là có 1 IP public và 02 domain nằm tên 02 sever khác nhau
Theo vd_quanta dùng squid hoặc nginx để giải quyết trường hợp của mình.
Mình đã dùng squid hoặc nginx để cấu hình nhưng chưa thành công, không biết lỗi gì trong tập tin cấu hình.

zinxu wrote:
Tôi chưa đọc đến phần IPtables, nhưng vì bạn không đề cập đến public IP nên tôi muốn hỏi lại để làm rõ đề bài.

Tôi hiểu đề bài như dưới đây, không biết có đúng không?
- Bạn có 01 public IP
- Và 02 domain (ABC và XYZ) cùng map về Public IP ở trên
- Mỗi domain nằm trên 1 server khác nhau.

Vấn đề:
- Từ Internet vào ABC hay XYZ luôn bị lấy dữ liệu của domain ABC

Nếu như tôi hiểu đúng đề bài, thì về nguyên tắc phải có thiết bị/phần mềm hiểu được HTTP request: để tiếp nhận và từ đó chuyển tiếp yêu cầu đến đúng đích. Theo tôi, ý của bạn vd_ ở trên là đúng hướng rồi. Vấn đề chính không phải là firewall hay hệ điều hành, mà là phân tích được thông tin về domain trong gói tin HTTP để chuyển tiếp.

Chúc bạn thành công, 
Mình cố gắng tìm hiểu cấu hình cho được vụ này chứ hỏi hoài cũng hỏng ổn, mà lay hoay cũng chưa ra.

Theo quanta mình sử dụng squid cấu hình cho Webserver public vẫn chưa được, chưa tìm ra lỗi gì; và vd_ dùng nginx vẫn chưa được

Code:
cache_peer 192.168.2.115 parent 80 0 no-query originserver name=centos6
cache_peer_domain centos6 abc.com.vn
cache_peer 192.168.2.119 parent 80 0 no-query originserver name=servertv
cache_peer_domain servertv def.com.vn


Mình sử dụng nginx cấu hình vẫn không được: nginx.conf
Firewall: CentOS 6 gồm Iptables, squid
Eth0 (card mạng ngoài): 192.168.1.2
Eth1 (card mạng trong): 192.168.2.111

WebServer1: 192.168.2.115 (abc.com.vn)
vì mình hỏng dám đưa tên miền thật lên trong file cấu hình

Code:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
## Basic reverse proxy server ##
## Apache backend for abc.com.vn ##
upstream apachephp {
server 192.168.2.115:80;
}
## Start abc.com.vn##
server {
listen 192.168.1.2:80;
server_name abc.com.vn;
access_log /var/log/nginx/abc.com.vn.access.log main;
error_log /var/log/nginx/abc.com.vn.error.log;
#root /usr/share/nginx/html;
#index index.html index.htm;
## send request back to apache1 ##
location / {
proxy_pass  http://apachephp;
include /etc/nginx/conf.d/proxy.conf;
}
}
## End thongtinkhcn.vinhlong.gov.vn##
}


/etc/nginx/conf.d/proxy.conf

Code:
proxy_wwwect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100M;
client_body_buffer_size 1m;
proxy_intercept_errors on;
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 256 16k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;
proxy_read_timeout 300;


Các tập tin log không ghi vào được dung lượng là 0:
Code:
-rw-r--r--. 1 nginx root 0 Aug 20 21:09 access.log
-rw-r--r--. 1 nginx root 0 Aug 26 21:48 error.log
-rw-r--r--. 1 nginx root 0 Aug 21 15:09 abc.com.vn.access.log
-rw-r--r--. 1 nginx root 0 Aug 21 15:09 abc.com.vn.error.log


Mình sử dụng nginx reverse proxy websever backends trong nội bộ LAN thì truy cập được không không thể public ra ngoài Internet

vd_ wrote:
Tuỳ theo tên miền mà route traffic, như vậy việc quyết định route traffic là ở lớp application -> iptable không thể dùng được, phải dùng reverse proxy.

Squid có thể đươc, tuy không chuyên.

Thường người ta sẽ dùng nginx, mod_proxy, haproxy, varnish v.v... để làm việc này. 


Mình vẫn còn đang lây quây vấn đề này vấn chưa xong, vấn đề của mình một WebServer1 là HĐH Windows 2003, còn một WebServer2 CentOS 6

Code:
WebServer1: 192.168.2.115 (abc.com.vn)
WebServer2: 192.168.2.119 (def.com.vn)


- iptables hoạt động ở tầng nào? Trong khi đó cái hostname kia (def.com.vn) nằm ở tầng nào? Một request từ ngoài vào, đến 192.168.1.2, cổng 80 làm sao iptables biết chuyển nó đi đâu?
- Thứ tự xử lý các rules của iptables ra sao?  


Dù abc.com.vn hay def.com.vn đi vào nó đều phân giải thành cùng một IP do đó nó thực thi ưu tiên rule từ trên xuống
Code:
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.1.2 -i eth0 -j DNAT --to 192.168.2.115:80

Nên lúc nào nó cũng đi vào nội dung website tên miền websever1: 192.168.2.115

Quanta cho mình hỏi Có lẽ phải NAT thêm port 53 DNS cho nó để nó hiểu được là abc.com.vn hay def.com.vn để đi đúng vào hostname hỏng biết phải không để mai mình thử xem sao
Hiện tại từ Internet bên ngoài chỉ mới truy cập được vào website của WebServer1: 192.168.2.115 với tên miền là abc.com.vn

Hiện tại mình gặp vấn đề còn lại mong mọi người giúp đỡ, cám ơn mọi người

Chưa thiết lập được để Internet bên ngoài truy cập được vào website của WebServer2: 192.168.2.119 với tên miền là def.com.vn

Khi truy cập tên miền def.com.vn thì nó chạy vào nội dung website tên miền websever1: 192.168.2.115


Thiết lập mạng
Firewall: CentOS 6 gồm Iptables, squid
Eth0 (card mạng ngoài): 192.168.1.2
Eth1 (card mạng trong): 192.168.2.111


Các WebServer trong LAN, sử dụng mỗi tên miền cho website riêng

WebServer1: 192.168.2.115 (abc.com.vn)

WebServer2: 192.168.2.119 (def.com.vn)


Hiện tại cấu hình Iptables như sau:

Code:
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.1.2 -i eth0 -j DNAT --to 192.168.2.115:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.1.2 -i eth0 -j DNAT --to 192.168.2.119:80
iptables -t nat -A POSTROUTING -p tcp --dport 80 -o eth0 -j SNAT --to 192.168.1.2
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 8080 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m udp -p tcp --dport 53 -j ACCEPT


Tập tin /etc/sysconfig/iptables

Code:
# Generated by iptables-save v1.4.7 on Thu Jul 11 16:46:05 2013
*nat
smilieREROUTING ACCEPT [26:5297]
smilieOSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [34:2040]
-A PREROUTING -d 192.168.1.2/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.115:80
-A PREROUTING -d 192.168.1.2/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.119:80
-A POSTROUTING -o eth0 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.2
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Jul 11 16:46:05 2013
# Generated by iptables-save v1.4.7 on Thu Jul 11 16:46:05 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [366:198764]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m udp -p tcp --dport 53 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
COMMIT
# Completed on Thu Jul 11 16:46:05 2013

Trong trường hợp này không biết là do script chèn vào code rồi từ đó nó tự đông post bài vào csdl, hay la người dùng phần mềm để tấn công. Trong trường hợp này mình muốn tìm cách khắc phục sự cố để rút kinh nghiệm bảo mật thì phải giải quyết thế nào. Mong mòi người giúp
Mình làm forum PHPBB3 đưa lên host http://lyphuong.byethost4.com/forum/ . Lúc đầu thì nó bình thường Không biết thế nào mà nó tự động post bài vào CSDL wá trời, mấy bài tiếng anh, tiếng nga là bị post tự động đến giới hạn 50MB của byethost.com là hư forum. Mình chưa có kinh nghiệm bảo mật mong mọi người tìm lỗi giúp, và chỉ cách bảo mật đối với forum PHPBB3.
Thank !
Mình đã tìm thấy lỗi khi mount cifs không download được là do hàm is_file và filesize không làm việc trong tập tin xử lý download.php.
Trong PHP có 4 hàm: file_exists, is_file, filesize, is_dir
- Nếu các tập tin đặt trực tiếp tại máy chủ Web Apache, chay PHP thì 4 hàm làm việc tốt.
- Nếu các tập tin, thư mục được mount cifs đến thì hàm file_exists làm việc, nhưng 3 hàm is_file, filesize, is_dir không làm việc
Code:
<?php
echo file_exists('/share/dulieuweb/tailieuso/48471.pdf'); // hàm trả về 1 làm việc tốt
echo is_file('/share/dulieuweb/tailieuso/48471.pdf'); // hàm không làm việc
echo filesize('/share/dulieuweb/tailieuso/48471.pdf'); // hàm không làm việc
echo is_dir('/share/dulieuweb/tailieuso'); // hàm không làm việc
?>

Sử dụng Google Search với từ khoá "mount cifs is_file" sẽ tìm thấy giải thích

http://php.net/manual/en/function.is-dir.php
Just a note for anyone who encounters is_dir() returning false on CIFS mount points or directories within those mount points on 2.6.31 and newer kernels: Apparently in new kernels they've started using the CIFS serverino option by default. With Windows shares this causes huge inode numbers and which apparently can cause is_dir() to return false. Adding the noserverino option to the CIFS mount will prevent this. This may only occur on 32 systems but I don't have a 64 bit install to test against. 

Trên mạng có chỉ cách sử dụng mount cifs thêm option noserverino
Các hàm file_exists, is_file, filesize, is_dir đã làm việc, vấn đề download đã làm việc tốt.
Cám ơn Anh conmale, cám ơn mọi người.


Thử mount thay vì vào /share/dulieuweb, thì mount vào /var/www/share/dulieuweb xem? 


Mình có làm trường hợp này luôn rồi
Phần các tập tin đặt trong thư mục ứng dụng web
Em cũng có kiểm tra mount các tập tin đến trong thư mục ứng dụng web "/var/www/html/csdlkhcn"
Khi mount đến máy chủ Web có đường dẫn thư mục chứa tập tin là "/var/www/html/csdlkhcn/dulieu/tailieuso"
Định nghĩa đường dẫn
Code:
define( 'JPATH_DULIEU', 'http://192.168.2.115/csdlkhcn/dulieu'); // Duong dan nam trong thu muc ung dung Web

Quá trình download.php xử lý, kiểm tra đường dẫn đầy đủ đến tập tin 48471.pdf là
Code:
http://192.168.2.115/csdlkhcn/dulieu/tailieuso/48471.pdf


Kết quả vẫn giống như bên trên: tức là tập tin tại máy chủ Web Apache download được; tập tin mount từ thiết bị lưu trữ QNAP đến máy chủ web Apache thì không được
Trên apache config chẳng thấy có cái gì liên quan đến "/share/dulieuweb" hết. Cái "/share/dulieuweb" thuộc trong DocRoot nào của apache? Thuộc virtualhost nào (nếu có)?

Trong cấu hình của apache ở trên chỉ có mỗi: DocumentRoot "/var/www/html", vậy cái "/share/dulieuweb" nằm ở đâu trong DocumentRoot này? 


Khi mount đến máy chủ Web có đường dẫn thư mục chứa tập tin là "/share/dulieuweb/tailieuso"

Kiểm tra Link download
Code:
csdlkhcn/download.php?dulieu=tailieuso&file=48463.pdf

Code định nghĩa đường dẫn:
Code:
define( 'JPATH_DULIEU', '/share/dulieuweb'); // Duong dan thu muc nam ngoai ung dung Web

Em không dùng virtualhost
Đường dẫn nằm ngoài thư mục ứng dụng web, tức là "/share/dulieuweb" (tại root)
Tuy không nằm trong DocumentRoot (Không nằm trong DocumentRoot "/var/www/html" ; hoặc không nằm trong thư mục ứng dụng web "/var/www/html/csdlkhcn" nhưng vẫn download được tập tin chứa trong đường dẫn "/share/dulieuweb/tailieuso", em đã kiểm tra cả các máy trong LAN và ngoài Internet.
Code php nhận thêm đường dẫn có thư mục tailieuso và cả tập tin cần download
Code:
if ($_GET["dulieu"]=='mov')
$upload_dir=JPATH_DULIEU.'/movie/';
else if ($_GET["dulieu"]=='tailieuso')
$upload_dir=JPATH_DULIEU.'/tailieuso/';
else if ($_GET["dulieu"]=='dulieucnnn')
$upload_dir=JPATH_DULIEU.'/dulieucnnn/';
else if ($_GET["dulieu"]=='detai')
$upload_dir=JPATH_DULIEU.'/detai/'.$_GET["dd"].'/';
else if ($_GET["dulieu"]=='congviec')
$upload_dir=JPATH_DULIEU.'/congviec/';
//lay ten file can download tu URL
$filename = isset($_GET['file'])?$_GET['file']:'';
$filename=str_replace(".dat",".wmv",$filename);
// Kiem tra in duongdan den taptin
//echo $upload_dir.$filename;

Quá trình download.php xử lý, kiểm tra đường dẫn đầy đủ đến tập tin 48471.pdf
Code:
/share/dulieuweb/tailieuso/48471.pdf


Nó chỉ bị sự cố ở chỗ là:
- Trường hợp 1: Tập tin nằm trực tiếp tại máy chủ Web Apache thì download được
- Trường hợp 2: Tập tin được mount đến máy chủ Web Apache thì download không được (đây là trường hợp cần khắc phục để sử dụng)

Phải chi cả 2 trường hợp đều download không được thì mình nghĩ là lỗi do code php, hay lỗi đường dẫn; đằng này nó chỉ khác ở chổ là tập tin tai máy chủ web; hay tập tin mount đến máy chủ web (vị trí đường dẫn đến tập tin thì giống nhau)



Phần các tập tin đặt trong thư mục ứng dụng web
Em cũng có kiểm tra mount các tập tin đến trong thư mục ứng dụng web "/var/www/html/csdlkhcn"
Định nghĩa đường dẫn
Code:
define( 'JPATH_DULIEU', 'http://192.168.2.115/csdlkhcn/dulieu'); // Duong dan nam trong thu muc ung dung Web


Kết quả vẫn giống như bên trên: tức là tập tin tại máy chủ Web Apache download được; tập tin mount từ thiết bị lưu trữ QNAP đến máy chủ web Apache thì không được
Thì trình duyệt báo lỗi như thế nào? Như bạn trình bày, mình nghĩ có thể là lỗi lập trình php của web. 

Lỗi này là do mình viết code php để quy định khi download không được (có nằm trong code download.php bên dưới)
Mình có nghĩ đến lỗi code php và tìm lỗi nhưng chưa thấy.
Nhưng nếu cả 2 trường hợp: tập tin đặt tại máy chủ Web Apache hay tập tin được mount đến máy chủ Web từ thiết bị lưu trữ QNAP đều download không được (thì chắc chắn là lỗi code php)
Tình huống bên dưới: (nên chưa xác định được lỗi)
- Trường hợp 1: tập tin nằm trực tiếp tại máy chủ Web Apache thì download được
- Trường hợp 2: tập tin được mount đến máy chủ Web Apache thì download không được (đây là trường hợp cần khắc phục để sử dụng)

Bồ thảy cái cấu hình apache lên và nội dung cái download.php lên. Có thể đây là lỗi lập trình php. 

httpd.conf
Code:
ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Listen 80
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
Include conf.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
ServerName 192.168.2.115:80
UseCanonicalName Off
DocumentRoot "/var/www/html"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disabled
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disabled" line above, and uncomment
# the following line instead:
#
#UserDir public_html
</IfModule>
DirectoryIndex index.html index.html.var
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
TypesConfig /etc/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
HostnameLookups Off
ErrorLog logs/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log combined
ServerSignature On
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule mod_dav_fs.c>
# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb
</IfModule>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
ForceLanguagePriority Prefer Fallback
AddDefaultCharset UTF-8
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
AddHandler type-map var
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Alias /error/ "/var/www/error/"
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
<Directory "/var/www/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
</Directory>
</IfModule>
</IfModule>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider" wwwect-carefully
BrowserMatch "MS FrontPage" wwwect-carefully
BrowserMatch "^WebDrive" wwwect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" wwwect-carefully
BrowserMatch "^gnome-vfs/1.0" wwwect-carefully
BrowserMatch "^XML Spy" wwwect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" wwwect-carefully


download.php
Code:
<?php
ob_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>File Download</title>
</head>
<body>
<?php
// Ham thuc hien download
function send_file($upload_dir,$name) {
ob_end_clean();
$path = $upload_dir.$name;
if (!is_file($path) or connection_status()!=0) return(FALSE);
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Content-Type: application/octet-stream");
header("Content-Length: ".(string)(filesize($path)));
header("Content-Disposition: attachment; filename=$name");
header("Content-Transfer-Encoding: binary\n");
if ($file = fopen($path, 'rb')) {
while(!feof($file) and (connection_status()==0)) {
print(fread($file, 1024*8));
flush();
}
fclose($file);
}
return((connection_status()==0) and !connection_aborted());
}
?>
<?php
// Dinh nghia duong dan goc
define( 'JPATH_DULIEU', '/share/dulieuweb'); // Duong dan thu muc nam ngoai ung dung Web
//define( 'JPATH_DULIEU', 'http://192.168.2.115/csdlkhcn/dulieu'); // Duong dan nam trong thu muc ung dung Web
//define( 'JPATH_DULIEU', 'D:/dulieuweb');
// Kiem tra bien nhan ve tu URL de lay dung thu muc
//echo $_GET["dulieu"];
if ($_GET["dulieu"]=='mov')
$upload_dir=JPATH_DULIEU.'/movie/';
else if ($_GET["dulieu"]=='tailieuso')
$upload_dir=JPATH_DULIEU.'/tailieuso/';
else if ($_GET["dulieu"]=='dulieucnnn')
$upload_dir=JPATH_DULIEU.'/dulieucnnn/';
else if ($_GET["dulieu"]=='detai')
$upload_dir=JPATH_DULIEU.'/detai/'.$_GET["dd"].'/';
else if ($_GET["dulieu"]=='congviec')
$upload_dir=JPATH_DULIEU.'/congviec/';
//lay ten file can download tu URL
$filename = isset($_GET['file'])?$_GET['file']:'';
$filename=str_replace(".dat",".wmv",$filename);
// Kiem tra in duongdan den taptin
//echo $upload_dir.$filename;
//Close the session to allow for header() to be sent
// Goi ham send_file thuc hien download neu download khong duoc thi bao loi
session_write_close();
if(!send_file($upload_dir,$filename)) {
print '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />';
die ("Tập tin không tìm thấy trên Server !");
} else {
//Log the download
}
?>
</body>
</html>
<?php ob_end_flush(); ?>


Trước mắt là PHP báo một lỗi liên quan tới header 

Log Lỗi này thì: cả 2 trường hợp đều có lỗi này (Tập tin nằm trực tiếp tại máy chủ Web Apache thì download được, hay Tập tin được mount đến máy chủ Web Apache thì download không được), nên có lẽ không phải lỗi này. Mình cũng trong quá trình khắc phục lỗi này.
Câu này mơ hồ quá. Những log nào chứng minh rằng tập tin không download được khi dùng QNAP? Bồ cho vài ví dụ xem? 

Đã Xóa tất cả nội dung trong Log và sau đó em kiểm tra download một tập tin (nên log chỉ có mấy dòng đó thôi). Bên dưới là log download tập tin không được khi dùng QNAP, nó không ghi nhận gì vấn đề download không được.

Access log
Code:
192.168.2.111 - - [23/Sep/2011:02:23:02 +0700] "GET /csdlkhcn/download.php?dulieu=tailieuso&file=48470.pdf HTTP/1.1" 200 112 "http://192.168.2.115/csdlkhcn/tai-lieu-so-hoa.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"
192.168.2.111 - - [23/Sep/2011:02:23:02 +0700] "GET /favicon.ico HTTP/1.1" 200 1406 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"
192.168.2.111 - - [23/Sep/2011:02:26:02 +0700] "GET /csdlkhcn/tai-lieu-so-hoa.html HTTP/1.1" 200 46437 "http://192.168.2.115/csdlkhcn/index.php" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"
192.168.2.111 - - [23/Sep/2011:02:26:05 +0700] "GET /csdlkhcn/download.php?dulieu=tailieuso&file=48463.pdf HTTP/1.1" 200 112 "http://192.168.2.115/csdlkhcn/tai-lieu-so-hoa.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"


Error log
Code:
[Fri Sep 23 02:16:56 2011] [notice] caught SIGTERM, shutting down
[Fri Sep 23 02:19:43 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Sep 23 02:19:43 2011] [notice] Digest: generating secret for digest authentication ...
[Fri Sep 23 02:19:43 2011] [notice] Digest: done
[Fri Sep 23 02:19:43 2011] [notice] Apache/2.2.15 (Unix) DAV/2 configured -- resuming normal operations
[Fri Sep 23 02:22:59 2011] [error] [client 192.168.2.111] PHP Notice: Undefined variable: header_code in /var/www/html/csdlkhcn/components/com_chronoconnectivity/chronoconnectivity.html.php on line 56, referer: http://192.168.2.115/csdlkhcn/index.php
[Fri Sep 23 02:26:02 2011] [error] [client 192.168.2.111] PHP Notice: Undefined variable: header_code in /var/www/html/csdlkhcn/components/com_chronoconnectivity/chronoconnectivity.html.php on line 56, referer: http://192.168.2.115/csdlkhcn/index.php


Như vậy thì QNAP share bằng Samba và apache server mount QNAP với CIFS? 

Đúng rồi, QNAP được share bằng Samba và apache server mount QNAP với CIFS (như lệnh mount).
Nếu mount options với file_mode và dir_mode là 0777 như trên thì làm sao có được: 

Xin lỗi, Ban đầu em chỉ mount không có option với file_mode và dir_mode là 0777, nên nó là
Code:
drwxr-xr-x 1 root root 0 Apr 13 16:09 .
drwxr-xr-x. 3 root root 4096 Aug 26 21:33 ..
drwxr-xr-x 1 root root 0 Oct 25 2010 congviec
drwxr-xr-x 1 root root 0 May 26 16:30 detai
drwxr-xr-x 1 root root 0 Jun 28 15:34 dulieucnnn
drwxr-xr-x 1 root root 0 Sep 13 09:19 images
-rwxr-xr-x 1 root root 44 Sep 14 2005 index.html
drwxr-xr-x 1 root root 0 Aug 16 10:54 movie
drwxr-xr-x 1 root root 0 Aug 18 16:03 tailieuso


Sau đó mới mount lại thêm option với file_mode và dir_mode là 0777 nhưng vẫn download không được

Vậy người dùng không download được cái gì trong
các thư mục trên? Cụ thể là thư mục nào? Bồ liệt kê nội dung ngay thư
mục bị sự cố xem?
Bồ cũng thử xem ngay trên máy chạy apache, bồ
copy file đến /zzz/yy coi thử được không? Đồng thời, thử switch sang
account nào dùng để chạy apache và thử "read" files nằm trong /zzz/yy
coi thử được không? 


Quyền trên thư mục
Code:
drwxrwxrwx. 1 root root 0 Aug 18 16:03 tailieuso


Đây là vài tập tin trong thư mục cần download tailieuso, còn nhiều tập tin nữa và tên tập tin cần download là 48463.pdf có trong thư mục này (mà máy chủ Web Apachhe đã mount từ QNAP)

Code:
total 108761886
drwxrwxrwx. 1 root root 0 Aug 18 16:03 .
drwxrwxrwx. 1 root root 0 Apr 13 16:09 ..
-rwxrwxrwx. 1 root root 96256 Nov 13 2009 03.doc
-rwxrwxrwx. 1 root root 16630078 Mar 26 2003 10000.pdf
-rwxrwxrwx. 1 root root 17850979 Apr 26 2003 10001.pdf
-rwxrwxrwx. 1 root root 10165743 Apr 26 2003 10002.pdf
-rwxrwxrwx. 1 root root 23445714 Apr 26 2003 10003.pdf
-rwxrwxrwx. 1 root root 41681921 Apr 26 2003 10004.pdf


Ghi và đọc tập tin trên thư mục tailieuso đều được.

Nó có đặc điểm này:
Nếu download tập tin, dùng đường dẫn trực tiếp đến tập tin trực tiếp thì được (Các tập tin đặt tại máy chủ Web Apache, hay được mount từ thiết bị lưu trữ QNAP đều được)

Code:
http://xxx/xxx/xxx/tailieuso/48471.pdf


Nhưng khi dùng viết code php download để không hiển thị đường dẫn đến tập tin

Code:
csdlkhcn/download.php?dulieu=tailieuso&file=48463.pdf


- Trường hợp 1: tập tin nằm trực tiếp tại máy chủ Web Apache thì download được

- Trường hợp 2: tập tin được mount đến máy chủ Web Apache thì download không được (đây là trường hợp cần khắc phục để sử dụng)
Em xem Logs Apache nó giống nhau khi: các tập tin tại máy chủ web Apache thì download được, hay các tập tin đặt từ thiết bị lưu trữ QNAP mount sang máy chủ web Apache không download được.

- Máy chủ Web Apache sử dụng HĐH CentOS sử dụng filesystem ext4 (IP: xxx.xxx.xxx.115)
- QNAP là một thiết bị lưu trữ khác nó sử dụng HĐH Linux, chia sẽ dữ liệu (IP: xxx.xxx.xxx.118)

Lệnh mount trên máy chủ web Apache HĐH CentOS
- mount -t cifs //xxx.xxx.xxx.118/yy /zzz/yy -o username=xxx,password=xxx,iocharset=utf8,file_mode=0777,dir_mode=0777
Anh Conmale có thể chỉ cách khắc phục trường hợp này giùm. Thank !
Chào anh
- Em làm hoài mà nó vẫn chưa được.
- Đây là log Apache
Access log
192.168.2.111 - - [23/Sep/2011:02:23:02 +0700] "GET /csdlkhcn/download.php?dulieu=tailieuso&file=48470.pdf HTTP/1.1" 200 112 "http://192.168.2.115/csdlkhcn/tai-lieu-so-hoa.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"
192.168.2.111 - - [23/Sep/2011:02:23:02 +0700] "GET /favicon.ico HTTP/1.1" 200 1406 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"
192.168.2.111 - - [23/Sep/2011:02:26:02 +0700] "GET /csdlkhcn/tai-lieu-so-hoa.html HTTP/1.1" 200 46437 "http://192.168.2.115/csdlkhcn/index.php" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"
192.168.2.111 - - [23/Sep/2011:02:26:05 +0700] "GET /csdlkhcn/download.php?dulieu=tailieuso&file=48463.pdf HTTP/1.1" 200 112 "http://192.168.2.115/csdlkhcn/tai-lieu-so-hoa.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22" 


Error log
[Fri Sep 23 02:16:56 2011] [notice] caught SIGTERM, shutting down
[Fri Sep 23 02:19:43 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Sep 23 02:19:43 2011] [notice] Digest: generating secret for digest authentication ...
[Fri Sep 23 02:19:43 2011] [notice] Digest: done
[Fri Sep 23 02:19:43 2011] [notice] Apache/2.2.15 (Unix) DAV/2 configured -- resuming normal operations
[Fri Sep 23 02:22:59 2011] [error] [client 192.168.2.111] PHP Notice: Undefined variable: header_code in /var/www/html/csdlkhcn/components/com_chronoconnectivity/chronoconnectivity.html.php on line 56, referer: http://192.168.2.115/csdlkhcn/index.php
[Fri Sep 23 02:26:02 2011] [error] [client 192.168.2.111] PHP Notice: Undefined variable: header_code in /var/www/html/csdlkhcn/components/com_chronoconnectivity/chronoconnectivity.html.php on line 56, referer: http://192.168.2.115/csdlkhcn/index.php 


- Còn đây là permission thư mục chứa tập tin bên trong mình đã mount qua Máy chủ web Apache
drwxr-xr-x 1 root root 0 Apr 13 16:09 .
drwxr-xr-x. 3 root root 4096 Aug 26 21:33 ..
drwxr-xr-x 1 root root 0 Oct 25 2010 congviec
drwxr-xr-x 1 root root 0 May 26 16:30 detai
drwxr-xr-x 1 root root 0 Jun 28 15:34 dulieucnnn
drwxr-xr-x 1 root root 0 Sep 13 09:19 images
-rwxr-xr-x 1 root root 44 Sep 14 2005 index.html
drwxr-xr-x 1 root root 0 Aug 16 10:54 movie
drwxr-xr-x 1 root root 0 Aug 18 16:03 tailieuso 



Chào mọi người!
- Mình xây dựng trang web: ngôn ngữ PHP, CSDL MySQL, máy chủ Apache chạy trên HĐH CentOS
- Trên web có module download tài liệu là các tập tin .doc, .pdf,.. Các tập tin đặt tại máy chủ Web thì download về bình thường.
- Nhưng khi dùng một thiết bị lưu trữ QNAP (nó chạy HĐH Linux) để chứa các tập tin gốc .doc, .pdf . Mình đã mount thư mục chứa tập tin về máy chủ web Apache; thì trang web không thể download các tập tin này được.
- Mình đã disable SELinux trên máy chủ Web luôn vẫn không download được.
mừng quá mình làm được rồi.
Chương trình của mình là chuyển CSDL từ SQL Sever 2000 với trên 30.000 mẩu tin sang CSDL MySql và viết lại chương trình bằng php sử dụng CSDL MySql.
Mình đã chuyển CSDL xong sang MySql nhưng không sử dụng các table có sẳn vì các truờng chưa phù hợp.
Mình thiết kế lại các table và chuyển dữ liệu từ các table có sẳn sang table của mình.
Vì không phải dữ liệu chuyển từ một table có sẳn sang table cua mình không mà nó còn phụ thuộc vào một số trường hợp.
Dữ liệu của table cần chuyển nó còn phụ thuộc là nó phải nằm trong 3 cấp của lĩnh vực.

Code:
$cat = array(...); // có 16 phần tử
$subcat = array(...); // có 111 phần tử
$subcatdet = array(...) // có 289 phần tử


Nên mình phải dùng đến 3 vòng lặp for để chuyển

Code:
for($indexcat=0; $indexcat < $indexLimitcat; $indexcat++) {
for($indexsubcat=0; $indexsubcat < $indexLimitsub; $indexsubcat++) {
for($index=0; $index < $indexLimit; $index++) {
//Lệnh truy vấn SQL và nhận kết quả trả về
}
}
}



Vì dùng các vòng lặp for thời gian chạy quá lâu nên chỉ chuyển được trên 2000 mẩu tin thì không đủ thời gian chạy
Fatal error: Maximum execution time of 240 seconds exceeded.

Mình đã viết lại cách chuyển dữ liệu không dùng vòng lặp for
Các giá trị thay thế mình viết lại các hàm đề chuyển
Sau đây là một số đoạn lệnh hàm chuyển đổi có dùng trong chương trình.

Code:
function convert_cat($val) {
$cat = array(...); // 16 phần tử
$catid = array(...); // 16 phần tử
$indexLimit=count($cat); //Reset bien $indexLimitcat 16
for($index=0; $index < $indexLimit; $index++) {
if ($val==$cat[$index]) $val=$catid[$index];
}
return $val;
}
function convert_subcat($val) {
$formid = array(...); // 111 phần tử
$subcat = array(...); // 111 phần tử
$indexLimit=count($subcat);
for($index=0; $index < $indexLimit; $index++) {
if ($val==$subcat[$index]) $val=$formid[$index];
}
return $val;
}
function convert_subcatdet($val) {
$genreid = array(...); // 289 phần tử
$subcatdet = array(...) // 289 phần tử
$indexLimit=count($subcatdet); //Reset bien $indexLimitcat 16
for($index=0; $index < $indexLimit; $index++) {
if ($val==$subcatdet[$index]) $val=$genreid[$index];
}
return $val;
}

Sau đó mình dùng các hàm này quá trình chuyển dữ liệu giữa các table thì quá trình chuyển dữ liệu sẽ rất nhanh và chuyển được toàn bộ trên 30.000 mẫu tin.


Mình cần chuyển CSDL trong MySql bị lỗi Maximum execution time of 240 seconds exceeded
CSDL chuyển trên 30.000 mẫu tin
Nó chạy kết quả nhận dữ liệu gần 2.000 mẫu tin thì không đủ thời gian báo lỗi Fatal error: Maximum execution time of 240 seconds exceeded .

Mình dùng 3 vòng lập FOR lồng vào nhau
Sử dụng 3 mảng đã khai báo số phần tử

Code:
$cat = array(...); // có 16 phần tử
$subcat = array(...); // có 111 phần tử
$subcatdet = array(...) // có 289 phần tử


Mình thiết lập max_execution_time=240 vẫn không đủ thời gian để chạy

if(!ini_get('safe_mode')) {
set_time_limit(240);
ini_set('max_input_time', 300);
}

$indexLimit=count($subcatdet); //Reset bien $indexLimit 289
$indexLimitsub=count($subcat); //Reset bien $indexLimitsub 111
$indexLimitcat=count($cat); //Reset bien $indexLimitcat 16
for($indexcat=0; $indexcat < $indexLimitcat; $indexcat++) {
for($indexsubcat=0; $indexsubcat < $indexLimitsub; $indexsubcat++) {
for($index=0; $index < $indexLimit; $index++) {

//Lệnh truy vấn SQL và nhận kết quả trả về

}
}


Mình đang cần gấp các bạn chỉ giùm mình.
Ok máy trạm truy cập Internet được rồi. Thank bạn nhiều.
Mình dùng Red Hat Enterprise Linux 5, Squid 3.0

1. Mình cấu hình file squid.conf máy Linux, và không bật Firewall: System/Administrattion/Security Level and Filrewall (Firewall chọn Disable, SELinux chọn Disable)
Máy trạm cấu hình proxy trong trình duyệt thì máy trạm ra Internet được.

2. Trường hợp Firewall chọn Enable ở System/Administrattion/Security Level and Filrewall thì phải tiến hành cấu hình iptables để máy trạm truy cập Internet.

Mình đang tiến hành mở rule và port cho máy trạm truy cập Internet và public một máy Webserver trong LAN ra ngoài Internet bằng Iptables
Thì mình còn mơ hồ ở chổ là Enable firewall tại máy cài squid, mình nghĩ nếu bật firewall lên thì mình phải cấu hình cho iptables đúng thì mới cho máy trạm truy cập được internet nên mình tiến hành cấu hình iptables nhưng chưa được.
Hiện tại nó có một số cấu hình mặc định
Code:
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT


Mình tiến hành mở cổng để cho máy trạm truy cập được Internet nhưng còn bị lỗi
Mình bị trường hợp như sau mong chi giùm mình:

Mình cài squid lên máy Linux version 5 để làm proxy cho máy trạm truy cập Internet

Thứ 1:
Nếu mình disable firewall thì máy trạm truy cập được internet, nhưng bật enable firewall lên thì máy trạm không truy cập được internet
mình đã cho firewall đi qua: HTTP, HTTTPS, FTP

Disable SELinux

Thứ 2:
Mình muốn Public 1 Webserver ra bên ngoài Internet.

Mình tham khảo bài viết về Iptables trên mạng và cấu hình nhưng làm chưa được

Mô hình mạng của mình như vầy:

Máy chủ Linux 2 card mạng
WAN IP 192.168.1.2 gắn với ADSL
LAN IP 192.168.2.111 gắn với switch đường mạng trong là 192.168.2.0

Máy Webserver IP 192.168.2.110

Mình đã NAT ADSL Public Webserver và thành công trên Windows dùng ISA, bây giờ học làm trên squid với Linux nhưng nó còn bị lỗi
Bạn thử bỏ dấu # trước dòng cache_dir cho nó sử dụng khai báo cache_dir mặc đinh rồi start squid lại xem sao
cache_dir ufs /var/spool/squid 100 16 256
Mình đã cài gcc được rồi.

Cài gcc cần gcc-3.4.3-9.EL4.i386.rpm chứ không phải gcc4-4.0.0-0.14.EL4.i386.rpm. Mình đã cài gcc-3.4.3-9.EL4.i386.rpm trong lúc cài nó cần thêm các thư viện và mình đã cài đầy đủ và cuối cùng đã cài được

Và một số thư viên cần thiết
glibc-devel-2.3.4-2.i386.rpm
glibc-headers-2.3.4-2.i386.rpm
glibc-kernheaders-2.4-9.1.87.i386.rpm
binutils-2.15.92.0.2-10.EL4.i386.rpm


Sau đây là một số lệnh tóm tác trong lúc mình cài:

Code:
[color=red]#rpm -ivh binutils-2.15.92.0.2-10.EL4.i386.rpm[/color]
Preparing... ########################################### [100%]
package binutils-2.15.92.0.2-10.EL4 is already installed
[color=red]# rpm -ivh gcc4-4.0.0-0.14.EL4.i386.rpm[/color]
Preparing... ########################################### [100%]
1:gcc4 ########################################### [100%]
# gcc4 --version
gcc4 (GCC) 4.0.0 20041214 (Red Hat 4.0.0-0.14.EL4)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[color=red][# rpm -ivh gcc-c++-3.4.3-9.EL4.i386.rpm[/color]
error: Failed dependencies:
libstdc++-devel = 3.4.3 is needed by gcc-c++-3.4.3-9.EL4.i386
Suggested resolutions:
libstdc++-devel-3.4.3-9.EL4.i386.rpm
[color=red]# rpm -ivh libstdc++-devel-3.4.3-9.EL4.i386.rpm[/color]
Preparing... ########################################### [100%]
1:libstdc++-devel ########################################### [100%]
[color=red]# rpm -ivh gcc-c++-3.4.3-9.EL4.i386.rpm[/color]
Preparing... ########################################### [100%]
1:gcc-c++ ########################################### [100%]
root@linuxm2 softs]# gcc --version
gcc (GCC) 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


# which gcc
/usr/bin/gcc
 


Sau khi cài xong gcc mình đa cài được ./configure, make, make install, Cám ơn bạn nhé !

Ý của em là cài các gói bằng ./configure, make, make install đều bị lỗi, em lấy nmap để làm ví dụ
Khi cài 1 gói
#./configure
bị lỗi

checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.  


Xem tài liệu
Do thiếu bộ biên dịch gcc. Nên cài gcc gcc4-4.0.0-0.14.EL4.i386.rpm trong lúc cài nó báo lỗi thiếu các thư viên và em đã cài các thư viện bị báo thiếu
glibc-devel-2.3.4-2.i386.rpm, glibc-headers-2.3.4-2.i386.rpm, glibc-kernheaders-2.4-9.1.87.i386.rpm


# rpm -ivh glibc-kernheaders-2.4-9.1.87.i386.rpm
...
cuối cùng cài
# rpm -ivh gcc4-4.0.0-0.14.EL4.i386.rpm 

Các lênh cài trên không còn bị lỗi

Khi cài xong kiểm tra gcc thì đã được cài đặt
# gcc4 --version
 


Nhưng khi dùng cài lại vẫn bị lỗi
#./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.  


Đọc tài liệu về cài gcc thấy cần phải cài thêm thư viện binutils, nên gỡ bỏ gcc

Code:
#rpm -qa | grep gcc4
#rpm -e gcc4-4.0.0-0.14.EL4


Kiểm tra lại thấy gcc không còn nữa, nên định cài binutils, rồi cài lại gcc

Nhưng vẫn chưa được
Vậy để cài được gcc cần cài các thư viên như em liệt kê trên có đúng không, làm như thế nào để cài được gcc, em đang tìm hiểu về Linux nên có những cái chưa biết.
Em sử dụng Linux Redhat Enterprises AS 4.0
Em cài gói phần mềm bị lỗi
[root@linuxm2 nmap-4.76]# ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
[root@linuxm2 nmap-4.76]#

Em cài rpm gcc để có thể cài đặt

gcc4-4.0.0-0.14.EL4.i386.rpm
glibc-devel-2.3.4-2.i386.rpm
glibc-headers-2.3.4-2.i386.rpm
glibc-kernheaders-2.4-9.1.87.i386.rpm

Dùng ./configure để cài phần mềm bị lỗi như cũ
Có lẽ thiếu gói
binutils-2.15.92.0.2-22.src.rpm


Em dùng các lệnh sau để gỡ bỏ
#rpm -qa | grep gcc4
gcc4-4.0.0-0.14.EL4
#rpm -e gcc4-4.0.0-0.14.EL4
và cài
# rpm -ivh binutils-2.15.92.0.2-22.src.rpm
error: cannot create %sourcedir /usr/src/redhat/SOURCES

Bị lỗi wá trời hết biết rồi, vậy em phải cài gcc trong Linux Redhat Enterprises AS 4.0 như thế nào mới đúng để cài các gói khác.

Chỉ giùm em nhé !



 

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|