I have an issue. I have 2 production servers with working NGINX on 2 domains production-app1.example.com
and production-app2.example.com
but when I add them into haproxy balancer and uses just first or second, second one is working but first one returns nginx welcome page.
Nginx configuration is same on both, differs just in server_name
. I cannot figure out where is problem.
This is my haproxy configuration:
global
maxconn 500000
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
option http-server-close
timeout connect 10s
timeout client 30s
timeout server 120s
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance source
cookie SERVERUSED insert indirect nocache
mode http
http-request set-header X-Client-IP %[src]
option httpchk HEAD / HTTP/1.0
server production-app1.example.com production-app1.example.com:80 check fall 2 rise 2
server production-app2.example.com production-app2.example.com:80 check fall 2 rise 2
This is nginx conf on 1 app (not working one)
host:
upstream app_production {
server unix:/var/www/production/app/shared/tmp/sockets/puma.sock fail_timeout=0;
}
server {
server_name production-app1.example.com;
root /var/www/production/app/shared/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://app_production;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
access_log /var/www/log/production/app/access.log;
error_log /var/www/log/production/app/error.log;
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
listen 80;
}
and global nginx configuration
user deploy;
worker_processes 2;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events
{
worker_connections 4096;
}
http
{
include /etc/nginx/mime.types;
default_type application/octet-stream;
http2_max_concurrent_pushes 512;
http2_max_concurrent_streams 512;
http2_chunk_size 16k;
http2_body_preread_size 256k;
connection_pool_size 5600;
proxy_http_version 1.1;
proxy_set_header Connection "";
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 360;
keepalive_requests 10000;
types_hash_max_size 2048;
server_names_hash_bucket_size 128;
large_client_header_buffers 8 5600;
proxy_connect_timeout 120s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 440s;
proxy_cache_path /tmp/nginx-cache keys_zone=nginx-cache:10m loader_threshold=300 loader_files=200 max_size=200m;
proxy_cache nginx-cache;
proxy_buffers 40 16k;
proxy_buffer_size 512k;
proxy_busy_buffers_size 512k;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'request_time=$request_time '
'upstream_response_time=$upstream_response_time '
'upstream_connect_time=$upstream_connect_time '
'upstream_header_time=$upstream_header_time';
access_log /var/log/nginx/access.log main buffer=2048k flush=120;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Second one has same configuration, but it works like a charm.
Thanks for help.