Nội dung bài viết

Khi dùng MAMP để chạy môi trường phát triển trên máy cá nhân, có lúc web server không khởi động được. Nguyên nhân thường là một ứng dụng khác đã chiếm mất cổng 80. Skype là thủ phạm kinh điển, nhưng IIS trên Windows, Docker Desktop hay một bản XAMPP cài trước đó cũng gây ra tình trạng tương tự.

Cách xử lý là đổi cổng của web server sang cổng khác, thường là 8080.

Các bước thực hiện

  1. Thoát MAMP hoàn toàn. Không chỉ đóng cửa sổ mà phải tắt hẳn, kiểm tra cả khay hệ thống.

  2. Mở file cấu hình Apache bằng trình soạn thảo văn bản:

    C:\MAMP\conf\apache\httpd.conf

    Trên macOS đường dẫn là /Applications/MAMP/conf/apache/httpd.conf.

  3. Tìm dòng Listen 80

  4. Đổi thành Listen 8080 rồi lưu lại.

  5. Mở MAMP lên, vào phần thiết lập cổng trong giao diện và đổi giá trị sang 8080, sau đó lưu.

  6. Truy cập website bằng địa chỉ kèm cổng:

    http://localhost:8080

Sửa thêm ServerName

Ngay dưới Listen thường có dòng ServerName. Nếu nó vẫn ghi cổng cũ, Apache có thể sinh ra đường dẫn chuyển hướng sai:

ServerName localhost:8080

Tìm ứng dụng nào đang chiếm cổng

Thay vì đổi cổng, đôi khi bạn muốn biết chính xác thứ gì đang giữ cổng 80 để tắt nó đi.

Trên Windows, mở Command Prompt với quyền quản trị:

netstat -ano | findstr :80

Cột cuối cùng là PID của tiến trình. Tra tên tiến trình đó:

tasklist | findstr <PID>

Trên macOS hoặc Linux:

sudo lsof -i :80

Nếu thủ phạm là IIS trên Windows, bạn có thể tắt nó bằng:

net stop http

Nếu MySQL cũng bị trùng cổng

MySQL trong MAMP mặc định chạy ở cổng 3306, hay bị trùng nếu máy đã cài sẵn MySQL hoặc XAMPP. Đổi trong file:

C:\MAMP\conf\mysql\my.ini

Tìm dòng port=3306 và đổi sang 3307.

Nhớ rằng khi đổi cổng MySQL, chuỗi kết nối trong mã nguồn cũng phải sửa theo:

$conn = new mysqli( '127.0.0.1:3307', 'root', 'root', 'ten_database' );

Sau khi đổi cổng

Có vài chỗ dễ quên khi web chạy ở cổng khác 80:

Cấu hình mã nguồn. WordPress lưu URL trong database, nên site sẽ cố chuyển hướng về http://localhost mà không có cổng và dẫn tới trang trắng. Sửa trong wp-config.php:

define( 'WP_HOME', 'http://localhost:8080' );
define( 'WP_SITEURL', 'http://localhost:8080' );

Đường dẫn callback. Nếu bạn đang tích hợp cổng thanh toán hay đăng nhập mạng xã hội, các URL callback đã đăng ký cũng phải cập nhật cổng mới.

Dùng cổng 8080 làm mặc định luôn. Nếu bạn thường xuyên gặp trùng cổng, cứ để MAMP ở 8080 và quen với việc gõ cổng trong địa chỉ. Đỡ phải tắt bật ứng dụng khác mỗi lần cần lập trình.