
需要注意的是:我曾在網站管理員 StackExchange 和 ServerFault 上提出過這個問題,但兩次都關閉了。在 ServerFault 上,我被重定向到這裡。
我一直在瘋狂地試圖找出為什麼這行不通。這是我第一次使用 Apache 和 CentOS。這是一個業餘愛好網站,可以幫助我培養我的技能。
這就是我想要做的:我在伺服器上設定了 ASP.NET Core 應用程式。這些文件位於/var/www/myapp
.我為它設定了一個服務,它正在連接埠 5000 上運行並工作。
curl -H 'Content-Type: application/json' -X POST -d '<json>' http://127.0.0.1:5000/graphql
現在,我希望能夠透過我的網域上的反向代理與此應用程式進行互動。我首先關注了有關此問題的 Microsoft 文件:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
這對我來說不起作用,所以我開始做大量研究,但我迷失了。無論我做什麼,我都會收到 404 錯誤。未找到。天哪,我受夠了,哈哈。這就是我現在所處的位置。我有一個設定檔myapp.conf
名/etc/apache2/conf.d
:
<VirtualHost *:80>
ServerName <domain>.com
ServerAlias *.<domain>.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ErrorLog /etc/apache2/logs/myapp-error.log
CustomLog /etc/apache2/logs/myapp-access.log common
</VirtualHost>
我知道我的設定檔被看到:
apachectl -S | grep myapp
*:80 <domain>.com (/etc/apache2/conf.d/myapp.conf:1)
我知道代理模組已啟用:
httpd -M | grep proxy
proxy_module (shared)
proxy_fcgi_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)
當我為了安全起見嘗試手動加載它們時,Apache 告訴我它們已經啟用並跳過它們。我知道我的配置也沒問題:
apachectl -t
Syntax OK
我在用著失眠測試反向代理。交換是這樣的:
* Preparing request to http://<domain>.com/graphql
* Using libcurl/7.69.1 OpenSSL/1.1.1g zlib/1.2.11 brotli/1.0.7 libidn2/2.1.1 libssh2/1.9.0 nghttp2/1.40.0
* Current time is 2020-06-27T01:22:57.448Z
* Disable timeout
* Enable automatic URL encoding
* Enable SSL validation
* Enable cookie sending with jar of 1 cookie
* Too old connection (488 seconds), disconnect it
* Connection 46 seems to be dead!
* Closing connection 46
* Trying <ip_address>:80...
* Connected to <domain>.com (<ip_address>) port 80 (#47)
> POST /graphql HTTP/1.1
> Host: <domain>.com
> User-Agent: insomnia/2020.2.2
> Content-Type: application/json
> Accept: */*
> Content-Length: 343
| <json>
* upload completely sent off: 343 out of 343 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Sat, 27 Jun 2020 01:22:57 GMT
< Server: Apache
< Content-Length: 315
< Content-Type: text/html; charset=iso-8859-1
* Received 315 B chunk
* Connection #47 to host <domain>.com left intact
根據我讀過的所有內容……我沒有理由收到這些 404。順便說一句,我已經嘗試了數十種不同的方法來設定設定檔中的每個指令。如果您有建議,我會很樂意再做一次。
我一直試圖找出但沒有成功的一件事是是否有一種方法可以根據您的 Apache 設定測試請求並查看 Apache 如何路由該請求。所以如果有人知道那就太好了。
答案1
因此,經過多次嘗試和錯誤,我認為問題在於我的虛擬主機定義只是在 httpd.conf 中的預設定義之後進行處理。當我將虛擬主機定義更改為偵聽伺服器的 IP 位址而不是 時*:80
,它起作用了。
<VirtualHost *:80>
...
</VirtualHost>
to
<VirtualHost <my-server-ip-address>:80>
...
</VirtualHost>
我想弄清楚為什麼 *:80 不起作用,但也許那是另一天的事了。