Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Cài đặt môi trường lập trình web trên MacOS (2): config nginx, virtual host, multiple PHP
Ở phần 1, chúng ta đã cài đặt nginx, php và mysql thông qua homebrew. Nhưng như vậy vẫn chưa thể chạy 1 dự án php đơn giản. Phần này sẽ config và kết nối các thứ với nhau cũng như virtual host.
Visual Studio Code
Phần này sẽ cần config các file, bạn có thể sử dụng 1 text editor bất kỳ để mở, chỉnh sửa file. Mình khuyên dùng visual studio code cho việc này. Có thể cài đặt thông qua brew
$ brew cask install visual-studio-code
Dnsmasq
Trước khi config nginx, ta sẽ cài đặt dnsmasq để hỗ trợ cho phần virtual host. Thông thường khi cần dùng virtual host thì ta sẽ config trong web server (apache/nginx) và thêm host vào file /etc/hosts
. Với dnsmasq, chúng ta không cần làm vậy, nó sẽ tự động mapping domain *.test
chẳng hạn với localhost 127.0.0.1
Đầu tiên, cài đặt dnsmasq qua brew
$ brew install dnsmasq
Thêm .test
host vào dnsmasq
$ echo 'address=/.test/127.0.0.1' > /usr/local/etc/dnsmasq.conf
Hoặc muốn thêm cả .local
vào dnsmasq
$ echo 'address=/.test/127.0.0.1\naddress=/.local/127.0.0.1' > /usr/local/etc/dnsmasq.conf
Khởi động service
$ sudo brew services start dnsmasq
Chạy các lệnh sau để add domain vào resolver
$ sudo mkdir -v /etc/resolver
$ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/test'
$ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/local'
Thử ping một domain bất kỳ, ví dụ reishou.test
$ ping reishou.test
PING reishou.test (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.021 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.081 ms
Thư mục code chính
Nginx cài đặt thông qua homebrew sẽ có root document mặc định là /usr/local/var/www
. Nhiều người lại thường đặt code ở home ~/
hay chính là /Users/[username]
. Đặt code ở đâu tiện thì đặt, tùy ý bạn. Cá nhân mình lại thích đặt ở /Code
.
$ sudo mkdir /Code
$ sudo chown reishou:staff /Code
Thay reishou
bằng username của bạn, xác định username bằng câu lệnh whoami
. Từ đây trờ về sau các câu lệnh hay config sẽ dùng reishou
là username, bạn cần tự thay đổi cho phù hợp.
$ whoami
reishou
Config PHP
Mở thư mục /usr/local/etc/php
$ code /usr/local/etc/php
Mở file php-fpm.d/www.conf
Tìm đoạn về user, group
user = _www
group = _www
đổi thành
user = reishou
group = staff
Thay đoạn listen
listen = 127.0.0.1:9000
thành listen mới
listen = /usr/local/var/run/php73.sock
Mở comment cho phần listen permission (bỏ dấu ;
)
;listen.owner = _www
;listen.group = _www
;listen.mode = 0660
và chỉnh sửa thành
listen.owner = reishou
listen.group = staff
listen.mode = 0660
File sau khi chỉnh sửa sẽ như sau
Chỉnh sửa tương tự cho các php version khác, chú ý chỉ khác ở phần listen, ví dụ config cho bản 7.2
listen = /usr/local/var/run/php72.sock
Sau đó khởi động lại các service php
$ brew services restart php@7.3 $ brew services restart php@7.2
Config nginx
Trước hết cần tạo file config để nginx gọi php
$ code /usr/local/etc/nginx/php73.conf
Copy đoạn sau vào file vừa tạo
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_pass unix:///usr/local/var/run/php73.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SERVER_NAME $host;
fastcgi_index index.php;
}
Làm tương tự với file /usr/local/etc/nginx/php72.conf
, lưu ý dòng fastcgi_pass
fastcgi_pass unix:///usr/local/var/run/php72.sock;
Tiếp theo mở thư mục /usr/local/etc/nginx
$ code /usr/local/etc/nginx
Mở file nginx.conf
, tìm dòng
#user nobody;
đổi thành
user reishou staff;
Thông thường ta có thể config server ngay trong file nginx.conf, nhưng chúng ta sẽ chia nhỏ các server vào trong thư mục server. Tạo file php73
trong thư mục này với nội dung
server {
listen 80;
server_name php73.test;
index index.php index.html;
root /Code/php73;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
include php73.conf;
}
Tương tự tạo file php72
server {
listen 80;
server_name php72.test;
index index.php index.html;
root /Code/php72;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
include php72.conf;
}
Ở đây chúng ta sẽ chạy thử 2 trang php72.test và php73.test với thư mục code cũng như load php config tương ứng. Tạo file /Code/php73/index.php
và /Code/php72/index.php
với cùng nội dung kiểm tra thông tin php
<span class="token keyword">$ mkdir /Code/php73 /Code/php72
$ echo "<?php phpinfo();" > /Code/php73/index.php</span>
<span class="token keyword">$ echo "<?php phpinfo();" > /Code/php72/index.php</span>
Khởi động lại nginx
$ sudo brew services restart nginx
Nếu thấy được như hình sau tức là bạn đã cài đặt và config thành công
Phần tiếp theo...
Phần tiếp theo sẽ có nội dung về Xdebug, phpunit và vài thứ linh tinh khác.





