Nginx resolve 403 forbidden error

When configuration virtual host in nginx with below configuration file.

virtual host configuration for php.sandbox
virtual host configuration for php.sandbox

Might be, you will have trouble with 403 forbidden error:

nginx virtual host 403
nginx virtual host 403

it could be caused by selinux, just check selinux audit logs with the command:

sudo ausearch -m avc –start recent | grep httpd or sudo ausearch -m avc –start recent | grep httpd or
sudo ausearch -m avc –start recent | grep nginx
sudo ausearch -m avc –start recent | grep nginx

selinux audit for nginx user
selinux audit for nginx user

The solution is that let selinux allow httpd user to read user content by the command

setsebool -P httpd_read_user_content 1
also remember chmod 755 for virtual host directory
#eg chmod 755 /home/longnguyen/php-workspace/

Good luck 😉

Finding all files containing a text string on linux

I faced with the issue that how to find all files containing a text string on linux

Just t do the following steps (I copy and paste from stackoverflow.com)

-r is recursive, -n is line number and -w stands match the whole word. Along with these, –exclude or –include parameter could be used for efficient searching. Something like below:

This will only search through the files which have .c or .h extensions. Similarly a sample use of –exclude:

Above will exclude searching all the files ending with .o extension. Just like exclude file it’s possible to exclude/include directories through –exclude-dir and –include-dir parameter, the following shows how to integrate –exclude-dir:

This works well for me.

References:
http://stackoverflow.com/questions/16956810/finding-all-files-containing-a-text-string-on-linux http://www-users.york.ac.uk/~mijp1/teaching/2nd_year_Comp_Lab/guides/grep_awk_sed.pdf ( useful tutorial about grep awk and sed command line)

PPTP Setup on Fedora 21 (kernel 3.19.3-200.fc21.x86_64)

I have just updated my laptop to fedora 21 OS.
And had faced with the problem when trying to connect my office VPN (via point to point tunneling protocol – PPTP) with this error message “connection process ends with timeout”.
If you have the same issue, type command below :

if you want to load nf_conntrack_pptp module automatically when your lap start up, type these commands:

You should change nf_conntrack_pptp.conf permisson to 771 if you have file permission error with the second command.

Reference link:
https://support.hidemyass.com/hc/en-us/articles/202721566-PPTP-Setup-on-Fedora
https://bugzilla.redhat.com/show_bug.cgi?id=1187328

nginx config for single wordpress blog

When you are using LEMP stack for your server, you probably struggle with ngnix configuration with some errors such as : cannot load js, css file, can not access wp admin, cannot open input file.

Below are some blocks need to have in your configuration file. All blocks below are in server block (in my case, i put all in my virtual host configuration file eg: /var/etc/nginx/site-availables/example.com.conf)

Url rewriting for permanent link:

if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}

Location block:

location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}

Reference :

  1. https://rtcamp.com/wordpress-nginx/tutorials/multisite/subdirectories/w3-total-cache/
  2. http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

 

symfony2 cant access app_dev.php from distant host – cấu hình nginx (php fpm) trên centos để chạy symfony2

Sau khi tải symfony2 về từ http://symfony.com/, hoặc dùng composer để cài đặt như hướng dẫn trên trang của symfony2, về cơ bản các bạn đã có thể bắt tay vào “đép” ngay.

Một số bạn dùng nginx, php-fpm trên centos thì cấu hình có thể hơi khác hơn như sau

server {

server_name symfony2.local;

root /usr/share/nginx/html; # cái này tùy thuộc vào nơi bạn để sourcecode

index app_dev.php; #development thì nên để app_dev.php, production thì chỉnh lại app.php

try_files $uri $uri/ /app_dev.php?$query_string;

location ~ ^/(app_dev|app_test.php|app)\.php(/|$) {

include /etc/nginx/fastcgi_params;

fastcgi_pass 127.0.0.1:9000;

fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;

}

}

Các bạn lưu nội dung trên vào file /etc/nginx/conf.d/symfony.conf, sau đó restart lại nginx

Các bạn truy cập theo địa chỉ symfony2.local/http://localhost/symfony/web/app_dev.php –> TADA nếu suốn sẻ nó sẽ hiển thị ra hình thế này

symfony2-welcome

Trong trường hợp bị lỗi Cant access app_dev.php from distant host khi bạn môi trường dev của bạn đặt ở máy ảo, bạn access từ máy host thì nó sẽ bị lỗi trên. Để fix lỗi này chỉ cần vào chỉnh file app_dev.php comment dòng sau

//if (isset($_SERVER[‘HTTP_CLIENT_IP’])

// || isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])

// || !in_array(@$_SERVER[‘REMOTE_ADDR’], array(‘127.0.0.1’, ‘fe80::1’, ‘::1’))

//) {

// header(‘HTTP/1.0 403 Forbidden’);

// exit(‘You are not allowed to access this file. Check ‘.basename(__FILE__).’ for more information.’);

//}

Xong, rựa là bạn có thể bắt tay dzo đép rồi đó ;))

Refs:

1. http://ihaveabackup.net/2012/11/17/nginx-configuration-for-symfony2/

2. http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html

3. http://forum.symfony-project.org/viewtopic.php?f=23&t=41866

 

some characters cannot be mapped using “ISO-8859-1″ character encoding eclipse

Khi làm việc với dự án nào đó với elipse có thể bạn mắc lỗi này:

some characters cannot be mapped using “ISO-8859-1″ character encoding.
Either change the encoding or remove the characters which are not supported
by the “ISO-8859-1″ character encoding

Hãy bình tĩnh làm theo các bước:

1. Trong eclipse: Chọn Help -> Software Updates -> Add Site

2. Nhập địa chỉ site này vào http://propedit.sourceforge.jp/eclipse/updates/

3. Next -> next liên tục -> restart lại eclipse

=> Bạn sẽ không còn bực mình khi đụng tới các file properties có kí tự UTF-8 nữa!

Good luck!

Tham khảo http://propedit.sourceforge.jp/howto_eclipseplugin_install_en.html

Procedure trong Oracle

Cảnh báo nhẹ: Bài viết được viết theo văn phong thời sinh viên, giọng văn hơi bị chuối ^^

Mai thi Oracle rồi, Bữa nay tranh thủ ôn lại bài. Đụng đến phần Procedure, tranh thủ viết bài viết lên blog của mình để trình bày lại những j mình hiểu, rèn luyện kỹ năng viết lách.

Procedure bản chất là 1 khối PL/SQL có tên và có đối số nhằm thực hiện một 1 số lệnh nào đó tùy theo mục đích của người viết ra nó.
Cú pháp:

Chạy 1 proc trong sqlplus như sau

Chú ý các thông số khai báo không được ràng buộc điều kiện cho chúng ví dụ : v_a number(3) là sai, mà đúng ra là v_a number — không có giới hạn số chữ số
Đặc biệt trong procedure ta cần chú ý tới phần parameter trong phần khai báo. Có 3 loại parameter trong oracle mà ta cần chú ý. Đó là IN, OUT, IN OUT

Chúng ta làm ví dụ sau để hiểu rõ hơn
Bạn tao 1 proc sau:

Trước khi chạy, ta hay xem ý định của ví dụ này là gì, dze ẹt đó là hoán vị 2 số a,b. Bạn thử đoán xem nó có chạy được không và nếu chạy được thì giá trị của a và b sau bước này có được hoán vị cho nhau không

Câu trả lời là không chạy được proc trên và báo lỗi sau

Lý do là vì là vì tham số a b ta chỉ được đọc giá trị của nó và gán vào biến temp(dòng 6 và 7 ), mặc định sau khi khai báo biến nếu ta không ghi gì hết thì ORACLE sẽ ngầm thêm IN đằng sau biến và khi đó ta chỉ được đọc giá trị của biến này thôi (read value) và gán giá trị này cho biến khác (v_temp:=a) cái này là pass by value(chỉ truyền trị số)
Để khác phục lỗi này ta làm như sau, rất đơn giản chỉ cần thêm IN OUT đằng sau khi khai báo biến, tại sao lại thêm như thế, thật đơn giản khi thêm IN OUT giá trị của biến a sẽ được đọc và gán vô biến v_temp, sau đó giá trị của biến a,b có thể được ghi đè lên. Đó là tại sao oracle lại thêm IN, OUT vào. Tuy rắc rối nhưng rất hữu ích trong 1 số trường hợp sau này khi ta cần sử dụng đến chúng.

Chạy thử OK, Procedure created.
Xong ta thử viết 1 unnamed proc đẻ chạy thủ hàm hoanvi này

Và kết quả trả về là

PL/SQL procedure successfully completed.

Xong, với ví dụ trên thì chắc hẳn các bạn và mình sẽ hiểu rõ hơn về tham số truyền vào Procedure trong Oracle.
Có ý kiến j đóng góp comment cùng trao đổi nha!

Java pass by value hay pass by reference

Chắc hẳn những bạn đã học qua C, C++ sẽ có suy nghĩ như thế khi qua học java. Bên C,C++ thì có cả 2 kiểu trên pass by valuepass by reference, thực chất pass by reference trong C++ là khai báo 1 biến alias khác tên nhưng cùng địa chỉ với biến ban đầu.

Ví dụ:
hoanvi1(int &a,int &b) là pass by refererence còn hoanvi2(int *a,int *b) và hoanvi3(int a,int b) là pass by value.
Khi gọi hàm hoanvi1 thì biến trong hàm hoanvi1 và biến truyền vào là 1(cùng 1 địa chỉ)
Còn khi gọi hàm hoanvi2,hoanvi3 thì giá trị của biến thưc được gán cho biến hình thức, hoặc địa chỉ của con trỏ thực sự được copy và gán cho con trỏ hình thức

Xem thêm:  http://www.codeprovn.com/forums/viewtopic.php?f=17&t=1945

Còn bên JAVA:

Pass by value có thể hiểu là bạn truyền trị số(giá trị của biến) của 1 biến này vào 1 biến khác

Vd: int x=3;

int y = x; // giá trị của biến x(3) sẽ được copy và gán vào y

Đối với kiểu dữ liệu object thì sao.

Vd:  A obj_a = new A();

A obj_b = obj_a; //obj_a , obj_b sẽ cùng tham chiếu tới 1 đối tượng kiểu A

Khi đó mọi thay đổi tới đối tượng A từ obj_b hoặc obj_a đều gây ảnh hưởng đến đối tượng A là 1 thể hiện của class A.

 

Tại sao lại như thế. Khi bạn gán obj_b=obj_a, địa chỉ đối tượng mà obj_a tham chiếu tới sẽ được copy lại và gán cho obj_b.Sau phép gán này thì obj_b sẽ tham chiếu tới đối tượng A. Chú ý là chỉ copy địa chỉ chớ obj_a và obj_b không cùng 1 địa chỉ, do đó Reference to Object is pass by value

Java is pass-by-value.

For primitives, you pass a copy of the actual value.

For references to objects, you pass a copy of the reference (the remote control).

Tham khảo: http://www.javaranch.com/campfire/StoryPassBy.jsp

So sánh 2 phương thức Post, Get

Notice: Bài viết này được tôi viết từ thời còn sinh viên, lúc còn non trẻ – thời mà restful cũng chưa ra những standard như hiện nay (2015). Các bạn đọc và so sánh với những kiến thức hiện tại nhé. Tôi sẽ cố gắng cập nhật nội dung bài viết này sớm  😀

Trong lập trình web. Để xử lý việc nhận gửi thông tin từ  1 form của người dùng nhập vào là rất thường xuyên. Chúng ta thường sử  dụng 2 phương thức POST và GET (ngoài các phương thức sẽ được sử dụng khi làm việc với RESTFUL webservice như PUT, DELETE sẽ được trình bày ở các bài sau liên quan đến RESTFUL webservice) . Tuy nhiên lúc nào sử  dụng POST, lúc nào sử  dụng GET ? Câu hỏi đó ko dễ trả lời vì có những cái chúng ta thường xuyên dùng 1 cách thói quen, chỉ biết dùng sao cũng chạy cả nên rất ít người hiểu rõ và trả lời được câu hỏi này.
Sau đây là sự  giống nhau và khác biệt giữa chúng.
* Giống nhau:  Đều gửi dữ liệu tới server để xử lý, sau khi người dùng nhập thông tin vào Form
* Khác nhau:
** POST:Bảo mật hơn POST vì dữ liệu được gửi ngầm, không xuất hiện trên URL
** GET:Dữ liệu được gửi tường minh, chúng ta có thể nhìn thấy trên URL, đây là lý do khiến nó không bảo mật so
với POST

**GET thực thi nhanh hơn POST vì nhứng dữ  liệu gủi đi luôn được Webbrowser cached lại

**Khi dùng phương thức POST thì server luôn thực thi và trả về kết quả cho client, còn GET sẽ xem xét ứng với cùng 1 yêu cầu  sẽ xem trong cached có kết quả tương ứng với yêu cầu sẽ trả về ngay không cần phải thực thi các yêu cầu đó ở phía server

** Đối với những dự liệu luôn được thay đổi thì chúng ta nên sử  dụng phương thức POST, còn dữ  liệu ít thay đổi chúng ta dùng phương thức GET để truy xuất và xử lý nhanh hơn