Thứ hai, 28/10/2019 | 00:00 GMT+7

Cách thiết lập ứng dụng Node.js để sản xuất trên CentOS 7

Node.js là một môi trường chạy Javascript open-souce để dễ dàng xây dựng các ứng dụng mạng và phía server . Nền tảng này chạy trên Linux, OS X, FreeBSD và Windows, và các ứng dụng của nó được viết bằng JavaScript. Các ứng dụng Node.js có thể chạy bằng dòng lệnh nhưng ta sẽ hướng dẫn bạn cách chạy chúng dưới dạng dịch vụ, vì vậy chúng sẽ tự động khởi động lại khi khởi động lại hoặc bị lỗi, vì vậy bạn có thể sử dụng chúng trong môi trường production .

Trong hướng dẫn này, ta sẽ đề cập đến việc cài đặt môi trường Node.js sẵn sàng production bao gồm hai server CentOS 7; một server sẽ chạy các ứng dụng Node.js do PM2 quản lý, trong khi server kia sẽ cung cấp cho user quyền truy cập vào ứng dụng thông qua Reverse Proxy Nginx tới server ứng dụng.

Phiên bản Ubuntu của hướng dẫn này có thể được tìm thấy tại đây .

Yêu cầu

Hướng dẫn này sử dụng hai server CentOS 7 với mạng riêng (trong cùng một trung tâm dữ liệu). Mạng riêng có thể được cấu hình trên các server mới khi chúng đang được tạo (trong phần Select additional options ). Ta sẽ gọi chúng bằng những cái tên sau:

  • ứng dụng : Server nơi ta sẽ cài đặt node.js , ứng dụng Node.js của bạn và PM2.
  • web : Server nơi ta sẽ cài đặt web server Nginx, server này sẽ hoạt động như một Reverse Proxy cho ứng dụng của bạn. User sẽ truy cập địa chỉ IP công cộng của server này để truy cập ứng dụng Node.js của bạn.

Lưu ý: Tham khảo Tài liệu DigitalOcean - Cách Bật Mạng Riêng tư trên Server nếu bạn định sử dụng một server hiện có hiện chưa được cấu hình mạng riêng.

Trước khi bắt đầu hướng dẫn này, bạn nên có một regular user , không phải root có quyền sudo cấu hình trên cả hai server của bạn — đây là user mà bạn nên đăng nhập vào server của bạn . Bạn có thể tìm hiểu cách cấu hình account regular user theo hướng dẫn cài đặt server ban đầu của ta cho CentOS 7 .

Các lệnh được thực thi trên server ứng dụng :

  • an_example_command_on_app

Các lệnh được thực thi trên server web :

  • an_example_command_on_web

Có thể sử dụng một server duy nhất cho hướng dẫn này, nhưng bạn sẽ phải thực hiện một số thay đổi trong quá trình này. Chỉ cần sử dụng địa chỉ IP localhost, tức là 127.0.0.1 , bất cứ nơi nào địa chỉ IP riêng của server ứng dụng được sử dụng.

Dưới đây là sơ đồ cài đặt của bạn sẽ như thế nào sau khi làm theo hướng dẫn này:

Đảo ngược Proxy sang Ứng dụng Node.js

Nếu bạn muốn có thể truy cập server web của bạn thông qua một domain , thay vì địa chỉ IP công cộng của nó, hãy mua một domain rồi làm theo các hướng dẫn sau:

Hãy bắt đầu bằng cách cài đặt node.js trên server ứng dụng .

Bước 1 - Cài đặt Node.js

Ta sẽ cài đặt version LTS mới nhất của Node.js, trên server ứng dụng .

SSH tới server ứng dụng của bạn bằng cách sử dụng regular user , không phải root có quyền sudo .

Trên server ứng dụng , hãy sử dụng curl để download file cấu hình Kho lưu trữ RPM NodeSource :

  • curl -L -o nodesource_setup.sh https://rpm.nodesource.com/setup_10.x

CURL sẽ sử dụng giao thức HTTPS để tải tập lệnh cài đặt xuống server của bạn, với kết quả bao gồm thông tin liên quan đến quá trình download :

Output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11109 100 11109 0 0 70128 0 --:--:-- --:--:-- --:--:-- 70757

Tiếp theo, bạn nên kiểm tra nội dung của script. Lệnh sau sẽ mở tập lệnh cài đặt NodeSource trong console server của bạn, sau đó bạn có thể tham chiếu chéo với tập lệnh cài đặt NodeSource (từ repository NodeSource Distributions Github) để xác nhận tập lệnh được download đúng cách:

  • vi nodesource_setup.sh

Khi đã hài lòng với file , hãy thoát vi bằng lệnh :q để quit và quay lại dòng lệnh.

Bây giờ hãy chạy tập lệnh cài đặt để cài đặt Kho lưu trữ RPM NodeSource. Điều này sẽ cho phép ta truy cập repository của NodeSource từ bên trong trình quản lý gói yum :

  • sudo -E bash nodesource_setup.sh

Tập lệnh xuất ra thông tin về cài đặt để ta tham khảo:

Output
## Installing the NodeSource Node.js 10.x repo... ## Inspecting system... + rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release || rpm -q --whatprovides cloudlinux-release || rpm -q --whatprovides sl-release + uname -m ## Confirming "el7-x86_64" is supported... + curl -sLf -o /dev/null 'https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm' ## Downloading release setup RPM... + mktemp + curl -sL -o '/tmp/tmp.2aCcULVx8n' 'https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm' ## Installing release setup RPM... + rpm -i --nosignature --force '/tmp/tmp.2aCcULVx8n' ## Cleaning up... + rm -f '/tmp/tmp.2aCcULVx8n' ## Checking for existing installations... + rpm -qa 'node|npm' | grep -v nodesource ## Run `sudo yum install -y nodejs` to install Node.js 10.x and npm. ## You may also need development tools to build native addons: sudo yum install gcc-c++ make ## To install the Yarn package manager, run: curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo sudo yum install yarn

Trước khi cài đặt Node.js, điều quan trọng là phải làm sạch tất cả thông tin đã lưu trong bộ nhớ cache khỏi yum . Xóa bộ nhớ cache sẽ đảm bảo yum sử dụng kết nối mạng để tải Node.js từ Kho lưu trữ NodeSource mới của ta (sẽ ngăn chặn mọi xung đột tiềm ẩn do các gói lỗi thời gây ra):

  • sudo yum clean all

Tiếp theo, ta sẽ download và sử dụng tất cả metadata cho các repo yum hiện được kích hoạt. Điều này sẽ đảm bảo các truy vấn yum của ta được hoàn thành nhanh nhất có thể:

  • sudo yum makecache fast

Để biên dịch và cài đặt các tiện ích bổ sung root từ npm ta cũng cần cài đặt các công cụ xây dựng:

  • sudo yum install -y gcc-c++ make

Bây giờ ta có thể cài đặt bản phát hành mới nhất của gói Node.js:

  • sudo yum install -y nodejs

Xác minh Node đã được cài đặt bằng cách kiểm tra version của nó bằng lệnh này:

  • node -v

Đầu ra của bạn sẽ hiển thị số version bạn đang chạy:

Output
v10.16.3

Node.js hiện đã được cài đặt và sẵn sàng chạy ứng dụng. Hãy viết một ứng dụng Node.js.

Bước 2 - Tạo ứng dụng Node.js

Bây giờ ta sẽ tạo một ứng dụng Hello World mà chỉ cần trả về "Hello World" cho bất kỳ yêu cầu HTTP nào. Đây là một ứng dụng mẫu sẽ giúp bạn cài đặt Node.js, bạn có thể thay thế ứng dụng này bằng ứng dụng của riêng mình — chỉ cần đảm bảo bạn sửa đổi ứng dụng của bạn để lắng nghe các địa chỉ IP và cổng thích hợp.

Vì ta muốn ứng dụng Node.js của bạn phục vụ các yêu cầu đến từ server Reverse Proxy ( web ) của ta , nên ta sẽ sử dụng network interface riêng của server ứng dụng để giao tiếp giữa các server . Tra cứu địa chỉ mạng riêng của server ứng dụng của bạn.

Nếu bạn đang sử dụng DigitalOcean Server làm server của bạn , bạn có thể tra cứu địa chỉ IP riêng của server thông qua dịch vụ Siêu dữ liệu . Trên server ứng dụng , sử dụng lệnh curl để truy xuất địa chỉ IP ngay bây giờ:

  • curl -sw "\n" http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address

Bạn cần sao chép kết quả (địa chỉ IP riêng), vì nó sẽ được sử dụng để cấu hình ứng dụng Node.js.

Tiếp theo, tạo và mở ứng dụng Node.js của bạn để chỉnh sửa. Đối với hướng dẫn này, ta sẽ sử dụng vi để chỉnh sửa một ứng dụng mẫu có tên hello.js :

  • vi hello.js

Chèn mã sau vào file và đảm bảo thay thế địa chỉ IP riêng của server ứng dụng cho cả hai mục APP_PRIVATE_IP_ADDRESS đánh dấu. Nếu muốn, bạn cũng có thể thay thế cổng được đánh dấu, 8080 , ở cả hai vị trí (hãy đảm bảo sử dụng cổng không phải administrator , tức là 1024 trở lên):

xin chào.js
var http = require('http'); http.createServer(function (req, res) {   res.writeHead(200, {'Content-Type': 'text/plain'});   res.end('Hello World\n'); }).listen(8080, 'APP_PRIVATE_IP_ADDRESS'); console.log('Server running at http://APP_PRIVATE_IP_ADDRESS:8080/'); 

Bây giờ lưu và thoát bằng cách nhấn ESC để thoát khỏi chế độ --INSERT-- , tiếp theo là :wq để writequit trong một lệnh duy nhất.

Ứng dụng Node.js này chỉ cần lắng nghe trên địa chỉ IP và cổng được chỉ định và trả về "Hello World" với mã thành công 200 HTTP. Điều này nghĩa là ứng dụng chỉ có thể truy cập được từ các server trên cùng một mạng riêng, chẳng hạn như server web của ta .

Nếu bạn muốn kiểm tra xem ứng dụng của bạn có hoạt động hay không, hãy chạy lệnh node này trên server ứng dụng :

  • node hello.js

Lưu ý: Chạy ứng dụng Node.js theo cách này sẽ chặn các lệnh bổ sung cho đến khi ứng dụng bị tắt bằng cách nhấn CTRL+C

Nó sẽ tiết kiệm rất nhiều gỡ lỗi Nginx nếu lần đầu tiên ta kiểm tra xem server web của ta có thể giao tiếp với ứng dụng Node.js trên ứng dụng hay không .

Để kiểm tra ứng dụng, hãy mở một phiên terminal khác và kết nối với server web của bạn. Vì web server nằm trên cùng một mạng riêng, nên nó có thể truy cập địa chỉ IP riêng của server ứng dụng bằng curl . Đảm bảo thay thế bằng địa chỉ IP riêng của server ứng dụng cho APP_PRIVATE_IP_ADDRESS và cổng nếu bạn đã thay đổi:

  • curl http://APP_PRIVATE_IP_ADDRESS:8080

Nếu bạn thấy kết quả sau, ứng dụng đang hoạt động bình thường và đang nghe trên địa chỉ IP và cổng thích hợp:

Node Application Output
Hello World

Nếu bạn không thấy kết quả phù hợp, hãy đảm bảo ứng dụng Node.js của bạn đang chạy và được cấu hình để lắng nghe trên địa chỉ IP và cổng thích hợp.

Trên server ứng dụng , hãy đảm bảo tắt ứng dụng bằng cách nhấn CTRL+C

Bước 3 - Cài đặt và sử dụng PM2

Bây giờ ta sẽ cài đặt PM2, là một trình quản lý tiến trình cho các ứng dụng Node.js. PM2 cung cấp một cách dễ dàng để quản lý và đa dạng hóa các ứng dụng (chạy chúng như một dịch vụ).

Ta sẽ sử dụng Node Packaged Modules (NPM), về cơ bản là trình quản lý gói cho các module Node cài đặt với Node.js, để cài đặt PM2 trên server ứng dụng của ta . Sử dụng lệnh này để cài đặt PM2:

  • sudo npm install pm2@latest -g

Ta sẽ trình bày một vài cách sử dụng cơ bản của PM2.

Điều đầu tiên bạn cần làm là sử dụng lệnh pm2 start để chạy ứng dụng của bạn, hello.js , trong nền:

  • pm2 start hello.js

Điều này cũng thêm ứng dụng của bạn vào danh sách tiến trình của PM2, được xuất ra mỗi khi bạn khởi động ứng dụng:

Output
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ hello │ 0 │ fork │ 30099 │ online │ 0 │ 0s │ 14.227 MB │ disabled │ └──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘

Như bạn thấy , PM2 tự động gán tên Ứng dụng (dựa trên tên file , không có phần mở rộng .js ) và id PM2. PM2 cũng duy trì các thông tin khác, chẳng hạn như PID của quá trình, trạng thái hiện tại và mức sử dụng bộ nhớ.

Các ứng dụng đang chạy dưới PM2 sẽ tự động khởi động lại nếu ứng dụng bị treo hoặc bị dừng , nhưng cần thực hiện thêm một bước để ứng dụng chạy khi khởi động hệ thống (khởi động hoặc khởi động lại). May mắn là PM2 cung cấp một cách dễ dàng để thực hiện việc này, lệnh con startup .

Lệnh con startup tạo và cấu hình tập lệnh khởi động để chạy PM2 và các tiến trình được quản lý của nó khi khởi động server . Bạn cũng phải chỉ định hệ thống init mà bạn đang chạy, đó là systemd , trong trường hợp của ta :

  • sudo pm2 startup systemd

Bạn sẽ thấy kết quả như sau, cho biết rằng dịch vụ PM2 đã được cài đặt:

Output
[PM2] Generating system init script in /etc/systemd/system/pm2.service [PM2] Making script booting at startup... [PM2] -systemd- Using the command: su root -c "pm2 dump && pm2 kill" && su root -c "systemctl daemon-reload && systemctl enable pm2 && systemctl start pm2" [PM2] Dumping processes [PM2] Stopping PM2... [PM2] All processes have been stopped and deleted [PM2] PM2 stopped [PM2] Done.

Để đảm bảo PM2 biết ứng dụng nào cần khởi động khi server khởi động , ta cần lưu danh sách tiến trình hiện tại. Để lưu danh sách:

  • pm2 save

Bạn sẽ thấy kết quả như sau, cho biết rằng danh sách tiến trình PM2 đã được lưu:

Output
[PM2] Saving current process list... [PM2] Successfully saved in /home/deployer/.pm2/dump.pm2

Bây giờ các ứng dụng do PM2 quản lý của bạn sẽ tự động khởi động khi server khởi động .

PM2 cung cấp nhiều lệnh con cho phép bạn quản lý hoặc tra cứu thông tin về các ứng dụng của bạn . Lưu ý việc chạy pm2 mà không có bất kỳ đối số nào sẽ hiển thị trang trợ giúp, bao gồm cả cách sử dụng ví dụ, trình bày cách sử dụng PM2 chi tiết hơn phần này của hướng dẫn.

Dừng ứng dụng bằng lệnh này (chỉ định App name hoặc id App name PM2):

  • pm2 stop example

Khởi động lại ứng dụng bằng lệnh này (chỉ định App name hoặc id App name PM2):

  • pm2 restart example

Danh sách các ứng dụng hiện do PM2 quản lý cũng có thể được tra cứu bằng lệnh con list :

  • pm2 list

Có thể tìm thấy thêm thông tin về một ứng dụng cụ thể bằng cách sử dụng lệnh con info (chỉ định tên hoặc id Ứng dụng PM2):

  • pm2 info example

Màn trình PM2 có thể được kéo lên với monit subcommand. Điều này hiển thị trạng thái ứng dụng, CPU và sử dụng bộ nhớ:

  • pm2 monit

Lưu ý: Chạy PM2 của monit lệnh sẽ chặn lệnh bổ sung cho đến khi ứng dụng được giết bằng cách nhấn CTRL+C .

Bây giờ ứng dụng Node.js của bạn đang chạy và được quản lý bởi PM2, hãy cài đặt Reverse Proxy .

Bước 4 - Cài đặt server Reverse Proxy Nginx

Bây giờ ứng dụng của bạn đang chạy và nghe trên một địa chỉ IP riêng, bạn cần cài đặt một cách để user của bạn truy cập vào nó. Ta sẽ cài đặt web server Nginx làm Reverse Proxy cho mục đích này. Hướng dẫn này sẽ cài đặt một server Nginx từ đầu. Nếu bạn đã có cài đặt server Nginx, bạn chỉ có thể sao chép khối location vào khối server mà bạn chọn (đảm bảo vị trí không xung đột với bất kỳ nội dung hiện có nào trên web server của bạn).

Trên server web , hãy cài đặt gói epel-release bằng yum:

  • sudo yum install epel-release

Sau đó cài đặt Nginx:

  • sudo yum install nginx

Bây giờ hãy mở file cấu hình Nginx để chỉnh sửa:

  • sudo vi /etc/nginx/nginx.conf

Đầu tiên, hãy tìm dòng nơi server_name được xác định, trong khối server mặc định. Nó trông giống như sau :

trích dẫn nginx.conf - server_name (trước)
server_name _; 

Cập nhật tên server để thay thế dấu gạch dưới ( _ ) bằng domain của bạn cho lệnh server_name (hoặc địa chỉ IP nếu bạn chưa cài đặt domain ).

đoạn trích nginx.conf - server_name (sau)
server_name your-domain; 

Sau đó, tìm dòng mà location / được xác định (thường là một vài dòng bên dưới tên server ), trong cùng một khối server mặc định. Nó trông giống như sau :

đoạn trích nginx.conf - vị trí / (trước)
        location / {         } 

Thay thế nó bằng khối mã sau và đảm bảo thay thế địa chỉ IP riêng của server ứng dụng cho APP_PRIVATE_IP_ADDRESS . Ngoài ra, hãy thay đổi cổng ( 8080 ) nếu ứng dụng của bạn được đặt để nghe trên một cổng khác:

/etc/nginx/nginx.conf đoạn trích - vị trí / (sau)
    location / {         proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;         proxy_http_version 1.1;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection 'upgrade';         proxy_set_header Host $host;         proxy_cache_bypass $http_upgrade;     } 

Điều này cấu hình server web để phản hồi các yêu cầu tại root của nó. Giả sử server của ta khả dụng tại your-domain , việc truy cập http://your-domain/ thông qua trình duyệt web sẽ gửi yêu cầu đến địa chỉ IP riêng của server ứng dụng trên cổng 8080 , sẽ được Node.js nhận và trả lời. ứng dụng.

Bạn có thể thêm các khối location bổ sung vào cùng một khối server để cung cấp quyền truy cập vào các ứng dụng khác trên cùng một server web . Ví dụ: nếu bạn cũng đang chạy một ứng dụng Node.js khác trên server ứng dụng trên cổng 8081 , bạn có thể thêm khối vị trí này để cho phép truy cập vào nó qua http://your-domain/app2 :

Cấu hình Nginx - Vị trí bổ sung
    location /app2 {         proxy_pass http://APP_PRIVATE_IP_ADDRESS:8081;         proxy_http_version 1.1;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection 'upgrade';         proxy_set_header Host $host;         proxy_cache_bypass $http_upgrade;     } 

Khi bạn đã hoàn tất việc chỉnh sửa (các) khối vị trí cho (các) ứng dụng của bạn , hãy lưu và thoát bằng cách nhấn ESC để thoát chế độ --INSERT-- , tiếp theo là :wq để writequit trong một lệnh duy nhất.

Trên server web , khởi động lại Nginx:

  • sudo systemctl start nginx

Tiếp theo, ta muốn đảm bảo Nginx chạy khi nào server khởi động lại:

  • sudo systemctl enable nginx

Lệnh enable sẽ cung cấp Đầu ra sau

Output
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

Bạn cũng có thể xác nhận Nginx đang chạy và được bật, bằng cách yêu cầu trạng thái của nó từ systemctl :

  • sudo systemctl status nginx

Trạng thái lệnh sẽ xuất ra thông tin cấu hình cho dịch vụ Nginx:

Output
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-10-14 09:37:23 UTC; 3min 29s ago Main PID: 12818 (nginx) CGroup: /system.slice/nginx.service ├─12818 nginx: master process /usr/sbin/nginx └─12819 nginx: worker process Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Starting The nginx HTTP and reverse proxy server... Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 nginx[12814]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 nginx[12814]: nginx: configuration file /etc/nginx/nginx.conf test is successful Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Started The nginx HTTP and reverse proxy server.

Cuối cùng, cung cấp cho Nginx khả năng chuyển tiếp lưu lượng thông qua Linux được tăng cường bảo mật (SELinux). SELinux cung cấp một lớp bảo mật triển khai Kiểm soát Truy cập Bắt buộc (MAC) trong Nhân Linux. Mỗi đối tượng hệ điều hành (tiến trình, bộ mô tả file , file , v.v.) được gắn nhãn với ngữ cảnh SELinux xác định các quyền và hoạt động mà đối tượng có thể thực hiện.

Nginx được gắn nhãn với ngữ cảnh httpd_t và do đó, có một số cấu hình bị SELinux chặn trừ khi được phép rõ ràng. Để chứng minh điều này, hãy chạy lệnh sau để xác nhận dịch vụ Nginx được gắn nhãn httpd_t :

  • ps -eZ

Lệnh này cung cấp thông tin trạng thái quy trình, tìm kiếm thông tin quy trình cụ thể của Nginx để xem nhãn. Bạn sẽ thấy httpd_t , theo cách tương tự như sau:

Output
... system_u:system_r:httpd_t:s0 10208 ? 00:00:00 nginx system_u:system_r:httpd_t:s0 10209 ? 00:00:00 nginx ...

Bây giờ, hãy kiểm tra trạng thái của các boolean mặc định liên quan đến nhãn httpd_t SELinux. Ta có thể hiển thị thông tin này bằng cách chạy lệnh sau:

  • getsebool -a

Ta chỉ quan tâm đến các boolean liên quan đến httpd cho hướng dẫn này:

Output
... httpd_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_connect_ftp --> off httpd_can_connect_ldap --> off httpd_can_connect_mythtv --> off httpd_can_connect_zabbix --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_memcache --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> off httpd_dbus_sssd --> off httpd_dontaudit_search_dirs --> off httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_graceful_shutdown --> on httpd_manage_ipa --> off httpd_mod_auth_ntlm_winbind --> off httpd_mod_auth_pam --> off httpd_read_user_content --> off httpd_run_ipa --> off httpd_run_preupgrade --> off httpd_run_stickshift --> off httpd_serve_cobbler_files --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_sys_script_anon_write --> off httpd_tmp_exec --> off httpd_tty_comm --> off httpd_unified --> off httpd_use_cifs --> off httpd_use_fusefs --> off httpd_use_gpg --> off httpd_use_nfs --> off httpd_use_openstack --> off httpd_use_sasl --> off httpd_verify_dns --> off ...

Hai boolean cần lưu ý cụ thể, là httpd_can_network_connecthttpd_can_network_relay . Tài liệu Redhat cung cấp chi tiết về từng boolean httpd và chức năng liên quan của chúng (nếu bạn muốn tìm hiểu thêm về từng boolean), mặc dù sau đây là những giải thích về hai boolean liên quan đến hướng dẫn này:

... httpd_can_network_connect: When disabled, this Boolean prevents HTTP scripts and modules from initiating a connection to a network or remote port. Enable this Boolean to allow this access. httpd_can_network_relay: Enable this Boolean when httpd is being used as a forward or reverse proxy. ... 

Vì cấu hình của ta chỉ là chuyển tiếp lưu lượng, ta chỉ cần nói với SELinux rằng server httpd , trong trường hợp của ta là Nginx, có thể sử dụng mạng để chuyển tiếp lưu lượng trong cấu hình Reverse Proxy mà ta đã cài đặt . Ta sẽ sử dụng cờ -P , đảm bảo rằng các thay đổi là vĩnh viễn (bỏ qua cờ này sẽ dẫn đến việc httpd_can_network_relay hoàn nguyên về trạng thái mặc định của nó, tắt khi khởi động lại server ):

  • sudo setsebool -P httpd_can_network_relay on

Giả sử rằng ứng dụng Node.js của bạn đang chạy và ứng dụng cũng như cấu hình Nginx của bạn chính xác, bạn có thể truy cập ứng dụng của bạn thông qua Reverse Proxy của server web . Hãy dùng thử bằng cách truy cập URL server web của bạn (địa chỉ IP hoặc domain công khai của nó).

Lưu ý: Nếu bạn cũng đang lên kế hoạch sử dụng server web của bạn để lưu trữ các trang web khác (dưới dạng server ảo thông thường), thì bạn cũng cần đặt httpd_can_network_connect thành bật.

Kết luận

Đến đây bạn có ứng dụng Node.js của bạn đang chạy sau Reverse Proxy Nginx. Cài đặt Reverse Proxy này đủ linh hoạt để cung cấp cho user của bạn quyền truy cập vào các ứng dụng khác hoặc nội dung web tĩnh mà bạn muốn chia sẻ.

Ngoài ra, nếu bạn đang tìm cách mã hóa đường truyền giữa web server và user của bạn , đây là hướng dẫn sẽ giúp bạn cài đặt hỗ trợ HTTPS (TLS / SSL) .


Tags:

Các tin liên quan

Cách cấu hình Cụm Galera với MariaDB trên server CentOS 7
2019-07-10
Cách sử dụng Chế độ độc lập của Certbot để lấy chứng chỉ SSL của Let's Encrypt trên CentOS 7
2019-05-31
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên CentOS 7
2019-05-29
Cách tạo một cụm Kubernetes bằng Kubeadm trên CentOS 7
2019-04-24
Cách cài đặt và sử dụng ClickHouse trên CentOS 7
2019-04-15
Cách thu thập số liệu cơ sở hạ tầng với Metricbeat trên CentOS 7
2019-03-27
Các bước được đề xuất bổ sung cho server CentOS 7 mới
2019-02-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên CentOS 7
2018-12-10
Cách lấy chứng chỉ SSL Wildcard của Let's Encrypt bằng cách sử dụng CloudFlare Validation trên CentOS 7
2018-08-16
Cách cài đặt và cấu hình LEMP bằng Bộ sưu tập phần mềm trên CentOS 7
2018-04-20