用proxy_passconfigurationnginx,用nodejsconfiguration

我的configuration有问题,除了我的crowler proxy_pass以外,一切都很好,stream量不会碰到那台服务器。 有没有人知道如何使用两个proxy_pass在同一位置/ {?

这是我的configuration:

upstream play_backend { server web01.local:1333; server web02.local:1333; } server { server_name website.com; listen 80; return 301 https://website.com$request_uri; } server { server_name website.com; listen 443; if ($host = website.com) { rewrite ^(.*) https://www.website.com:443$request_uri? permanent; } ssl on; ssl_certificate /xxx/fullchain.pem; ssl_certificate_key /xxx/privkey.pem; #HSTS add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; # ## Block http user agent - wget ## if ($http_user_agent ~* (Wget) ) { return 403; } ## Block Software download user agents ## if ($http_user_agent ~* LWP::Simple|BBBike|wget|libwww- perl|wordpress|WordPress/3.9.2|WordPress/4.0) { return 403; } location / { proxy_pass http://play_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; #Redirect scrapers to test.website.com if ($http_user_agent ~* (googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com)) { proxy_pass http://192.168.10.2:80; } } location /xxxx2 { proxy_pass http://xxx.xxx.xxx; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } 

现在我已经创build了一个自己的解决scheme,实际工作,并希望与大家分享。 剩下的唯一问题就是把真实的IP发送到上游

 upstream play_backend { server webb01.local:1333; server webb02.local:1333; } upstream crawler { server crawler.local:8080; } map $http_user_agent $backend { default "play_backend"; ~*(facebot|facebookexternalhit/1.1|facebookexternalhit/1.2|googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com) "crawler"; } server { location / { proxy_pass http://$backend; } } 

build议使用map指令而不是if

 map $http_user_agent $backend { default play_backend; "~*(googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com)" xxx.xxx.xxx:80; } server { location / { proxy_pass http://$backend; } } 

实际上你的configuration很奇怪。 没有server块来处理www.website.com ,所以它应该由nginx默认服务器处理。

这与原来的问题没有关系,但是因为你要求一个从website.comhttps://www.website.com的redirect的例子,这里是:

 server { listen 80; server_name website.com www.website.com; return 301 https://www.website.com; } server { listen 443; server_name website.com; return 301 https://www.website.com; } server { listen 443; server_name www.website.com; .... main configuration for the website .... }