konwertuj konf Nginx do apache conf dla proxypass

Dec 02 2020

Muszę przekonwertować ten plik Nginx conf na apache conf. Jak próbowałem się nawrócić, ale nie udało mi się go zdobyć.

upstream apiUpstream {

  # 1. Set your port here
  server 127.0.0.1:8080;
  keepalive 64;
}

server {
  listen 80;
  listen 443 ssl;

  # 2. Set your API domain name here
  server_name yourdomain.com;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # RequestHeader set X-Forwarded-Port "443" proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://apiUpstream/;  
    proxy_redirect off;
    proxy_read_timeout 240s;
  }

  # 3. SSL certificate set below
  # Here is added a sample certificate format of letsencrypt
  # You are free to remove it and configure yours here
  ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

To apache conf.

  ProxyRequests On
  ProxyPass   http://apiUpstream/ timeout=240
  ProxyPassReverse http://apiUpstream.com

Ale to nie działa, pomóż mi, aby to działało.I nie rozumiałem, co to jest top upstream conf i jak przekonwertować go na apache.

Edytować :

Otrzymuję ten błąd

peerjs.min.js:52 WebSocket connection to 'wss://api.example.com/peer/peerjs?key=peerjs&id=6yqD1MoKzkK&token=kp8g8w6pj2l' failed: Error during WebSocket handshake: 'Connection' header is missing

Próbowałem zmienić cpanel conf dla domeny w ten sposób.

<Proxy balancer://apiUpstream/>

 BalancerMember http:// 127.0.0.1:8080;
 keepalive 64;
 ProxySet lbmethod=byrequests
</Proxy>

ProxyRequests On
ProxyPass / balancer://apiUpstream/
ProxyPassReverse / balancer://apiUpstream/

Po zapisaniu tego nie mogę ponownie uruchomić Apache z WHM. mówi, że nie można załadować elementu równoważącego. Nie wiem, jak to naprawić.

Zrzut ekranu

i dokładny komunikat o błędzie

Syntax error on line 2 of /etc/apache2/conf.d/userdata/ssl/2_4/node/api.example.com/proxy_pass.conf: Dec 07 12:03:54 
ip-xx-xx-xxx-xx.ip.secureserver.net restartsrv_httpd[32106]: BalancerMember can not have a balancer name when defined in a location Dec 07 12:03:54

Odpowiedzi

PawelHawro Dec 13 2020 at 07:08

Przede wszystkim potrzebujesz apache z załadowanymi modułami:

  • mod_proxy
  • mod_proxy_http
  • mod_proxy_wstunnel (dostępny w httpd 2.4.5 i nowszych) docs

W Ubuntu możesz to włączyć za pomocą:

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel

Próbujesz połączyć się z WebSocket, musisz dostać się do WebSocket swojej aplikacji node.

Spróbuj czegoś takiego:

<VirtualHost *:443>
  ServerName example.com
      
  ProxyPreserveHost On
  RewriteEngine On
     
  # If header Upgrade: websocket found, proxy to ws
  RewriteCond %{HTTP:Upgrade} =websocket [NC]  
  RewriteRule /(.*)           ws://localhost:8080/$1 [P,L] # If header not found use http RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://localhost:8080/$1 [P,L]

  
  # SSL config
  ...
  
</VirtualHost>