Xin lưu ý: Đây là lần đầu tiên tôi thử triển khai ứng dụng phản ứng trên máy chủ Windows được xây dựng tùy chỉnh, nhưng tôi đã quản lý để thực hiện thành công trên Heroku và Linux (PM2), vì vậy tôi biết rằng kiến trúc ứng dụng là giả sử để làm việc một cách chính xác.
Kịch bản:
Tôi đã xây dựng một máy chủ lưu trữ Windows Server 2016/64 bit để lưu trữ nhiều trang web. Tôi đã sử dụng VPS Contabo để làm như vậy. Tôi đã thử nghiệm tất cả các tính năng được cho là hoạt động, ngay cả với các ứng dụng khác như ASP.NET, PHP, chứng chỉ SSL và mọi thứ đều hoạt động tốt.
Đối với dự án node js cụ thể mà tôi đang cố lưu trữ trên máy chủ này, Nó bao gồm 2 phần chính:
- Phần phụ trợ trong nút cùng với một CMS, cũng được phát triển trong nút / javascript.
Tôi đã tạo không gian lưu trữ trên miền phụ cho miền này và nó đang hoạt động hoàn hảo, ngay cả với chứng chỉ SSL Letâs Encrypt. Trong trường hợp bất cứ ai muốn truy cập nó, sẽ là:
https://backendnode.fullstackwebdesigner.com/system
- Giao diện người dùng trong kết xuất phía máy chủ phản ứng.
Đây là nơi vấn đề đang xảy ra. Nếu bất cứ ai muốn truy cập nó, đây là liên kết:
https://fullstackwebdesigner.com/
Về cơ bản, tôi đã sử dụng cùng một kỹ thuật cho cả hai:
- iisnode;
- phần mở rộng viết lại URL;
- mô-đun nút iis;
- cấu hình tệp web.config;
Vấn đề:
Tôi đã quản lý để tải nó dưới dạng một trang web, giống như tôi đã làm với phần phụ trợ, nhưng vấn đề là có vẻ như nó không tải được các tệp CSS, hình ảnh, v.v. Vì vậy, bố cục không tải. Trên bảng điều khiển, có thông báo lỗi:
Uncaught SyntaxError: Mã thông báo không mong muốn '<'
Ứng dụng phản ứng:
Như tôi đã nói trước đây, nó được thực hiện như một ứng dụng kết xuất phía máy chủ và đi kèm với webpack. Vì vậy, nó xây dựng các tệp được đóng gói vào một thư mục có tên là â/buildâ. Và trong thư mục này, có một thư mục â/publicâ chứa tất cả nội dung, chẳng hạn như tệp CSS và hình ảnh.
Trong khi phát triển, tôi sẽ chạy bản dựng trên thiết bị đầu cuối dưới dạng:
xây dựng nút/gói.react.js
Và thật kỳ lạ, khi tôi chạy cái này trên thiết bị đầu cuối trên máy chủ windows, Nó hoạt động hoàn hảo. Nhưng chỉ có thể được truy cập thông qua:
http://localhost:3001
Nó tải mọi thứ được cho là tải.
Đây là một biểu diễn đơn giản hóa cấu trúc tệp:
- /xây dựng/
--bundle.react.js
--/xây dựng/công khai/
---/bố cục tệp/
---/phông chữ/
--- bó.react.client.js
Đây cũng là tệp web.config tôi đang sử dụng trên không gian lưu trữ trang web để xây dựng phản ứng:
<configuration>
<system.webServer>
<iisnode nodeProcessCommandLine="C:\Program Files\nodejs\node.exe" />
<handlers>
<add name="iisnode" path="/build/bundle.react.js" verb="*" modules="iisnode" />
</handlers>
<rewrite>
<rules>
<!-- Redirect to HTTPS (alternative). -->
<rule name="Redirect to HTTPS / SSL" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
<!-- Don't interfere with requests for logs. -->
<rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$" />
</rule>
<!-- Node. -->
<rule name="sendToNode">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="/build/bundle.react.js" />
</rule>
</rules>
</rewrite>
<defaultDocument>
<files>
<clear />
<add value="/build/bundle.react.js" />
</files>
</defaultDocument>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="node_modules" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
<system.web>
<compilation defaultLanguage="js" />
</system.web>
</configuration>
Bất kỳ ai cũng có bất kỳ ý tưởng nào về những gì có thể bị thiếu hoặc đang diễn ra, vì chưa có nhiều tài liệu tham khảo về kết xuất phía máy chủ lưu trữ trên máy chủ windows trên web? Có thể là một cấu hình bổ sung trên IIS, web.config hoặc trên không gian lưu trữ trang web?
Chỉnh sửa:
Một thử nghiệm thú vị mà tôi vừa thực hiện: trên máy tính phát triển cục bộ của mình, khi tôi chạy qua thiết bị đầu cuối:
gói nút.react.js
từ bên trong thư mục /build, tôi nhận được kết quả giống như sự cố đang xảy ra trực tuyến (không có bố cục, kiểu, hình ảnh, v.v.).
Nhưng khi tôi chạy qua thiết bị đầu cuối:
xây dựng nút/gói.react.js
từ bên ngoài thư mục/build (từ thư mục cơ sở), nó tải hoàn hảo.
Về điều nhiều hơn nữa. Các thư mục cơ sở được tổ chức như sau:
â¦(một số thư mục)
- /xây dựng/
--bundle.react.js
--/xây dựng/công khai/
---/bố cục tệp/
---/phông chữ/
--- bó.react.client.js
-node_modules
â¦(một số tệp gốc, như webpack, v.v.)
Tôi đoán có một số loại vấn đề khi tham chiếu thư mục /node_modules do cách tôi viết tệp web.config, nhưng tôi không biết nên tham chiếu nó như thế nào.