Skip to content

Nginx 反向代理

Nginx 反向代理

The ngx_http_proxy_module module allows passing requests to another server.

Example Configuration

location / {
    proxy_pass       http://127.0.0.1:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}
location / {
    proxy_pass       http://127.0.0.1:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}

示例:

server {
        listen 80;
        server_name agou-ops.com;

        location / {
                proxy_pass http://192.168.174.141;
                proxy_set_header X-Real-IP $remote_addr;		# 向后端服务器传参数
                add_header X-Via $server_addr;			# 向客户端传递参数
        }
# 反代图片服务器
        location ~* \.(jpg|png|jpeg)$ {
                proxy_pass http://192.168.174.141:8088;
        }
}
server {
        listen 80;
        server_name agou-ops.com;

        location / {
                proxy_pass http://192.168.174.141;
                proxy_set_header X-Real-IP $remote_addr;		# 向后端服务器传参数
                add_header X-Via $server_addr;			# 向客户端传递参数
        }
# 反代图片服务器
        location ~* \.(jpg|png|jpeg)$ {
                proxy_pass http://192.168.174.141:8088;
        }
}

Nginx 缓存设置

示例:

http{
...
    proxy_cache_path  /usr/share/nginx/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;		# 参数分别是缓存存放路径,levels表示使用几级缓存目录,keys_zone表示从内存中抽出多大空间,inactive表示存取多长时间后过期,max_size表示最大使用空间
...
}
server {
...
    proxy_cache  cache_one;		# 启用缓存,缓存ID为cache_one
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    proxy_cache_valid  200 304 12h;		#对不同的HTTP状态码设置不同的缓存时间
    proxy_cache_key $request_uri;
...
}
http{
...
    proxy_cache_path  /usr/share/nginx/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;		# 参数分别是缓存存放路径,levels表示使用几级缓存目录,keys_zone表示从内存中抽出多大空间,inactive表示存取多长时间后过期,max_size表示最大使用空间
...
}
server {
...
    proxy_cache  cache_one;		# 启用缓存,缓存ID为cache_one
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    proxy_cache_valid  200 304 12h;		#对不同的HTTP状态码设置不同的缓存时间
    proxy_cache_key $request_uri;
...
}

Nginx 动态请求PHP

Example Configuration

location / {
    fastcgi_pass  localhost:9000;
    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
    fastcgi_param QUERY_STRING    $query_string;
    fastcgi_param REQUEST_METHOD  $request_method;
    fastcgi_param CONTENT_TYPE    $content_type;
    fastcgi_param CONTENT_LENGTH  $content_length;
}
location / {
    fastcgi_pass  localhost:9000;
    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
    fastcgi_param QUERY_STRING    $query_string;
    fastcgi_param REQUEST_METHOD  $request_method;
    fastcgi_param CONTENT_TYPE    $content_type;
    fastcgi_param CONTENT_LENGTH  $content_length;
}

示例一:

server {
        listen 80;
        server_name agou-ops.com;
        index index.php index.html;

        location / {
                root /usr/share/nginx/html/vhost1;
                proxy_pass http://192.168.174.142;		# 静态页面
        }

        location ~* \.php$ {
                fastcgi_pass 192.168.174.141:9000;		# 动态php页面
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME /data/php/$fastcgi_script_name;
        }
        
        location ~* ^/(status/ping)$ {
        	include fastcgi_params;
        	fastcgi_pass 192.168.174.141:9000;
        	fastcgi_param SCRIPT_FILENAME /data/php/$fastcgi_script_name;
        }
}
server {
        listen 80;
        server_name agou-ops.com;
        index index.php index.html;

        location / {
                root /usr/share/nginx/html/vhost1;
                proxy_pass http://192.168.174.142;		# 静态页面
        }

        location ~* \.php$ {
                fastcgi_pass 192.168.174.141:9000;		# 动态php页面
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME /data/php/$fastcgi_script_name;
        }
        
        location ~* ^/(status/ping)$ {
        	include fastcgi_params;
        	fastcgi_pass 192.168.174.141:9000;
        	fastcgi_param SCRIPT_FILENAME /data/php/$fastcgi_script_name;
        }
}

示例二:

http {
...
	fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
...
}
server {
...
    fastcgi_cache one;
    fastcgi_keep_conn on;	# This is necessary, in particular, for keepalive connections to FastCGI servers to function.
    fastcgi_cache_key $request_uri;
    fastcgi_cache_valid 200 302 10m;
    fastcgi_cache_valid 301 1h;
    fastcgi_cache_valid any 1m;
...
}
http {
...
	fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
...
}
server {
...
    fastcgi_cache one;
    fastcgi_keep_conn on;	# This is necessary, in particular, for keepalive connections to FastCGI servers to function.
    fastcgi_cache_key $request_uri;
    fastcgi_cache_valid 200 302 10m;
    fastcgi_cache_valid 301 1h;
    fastcgi_cache_valid any 1m;
...
}

其他

  • 反向代理代理到新地址,浏览器地址栏显示原始地址:
    location ~ ^/api/live/.*$ {
		proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
		proxy_set_header Host  $host;
		proxy_set_header X-Forwarded-For  $http_x_forwarded_for;
		proxy_set_header cmccip $cmccip;
		proxy_pass http://new_pool;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
		proxy_connect_timeout 10;
		proxy_read_timeout 15;
    }
    location ~ ^/api/live/.*$ {
		proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
		proxy_set_header Host  $host;
		proxy_set_header X-Forwarded-For  $http_x_forwarded_for;
		proxy_set_header cmccip $cmccip;
		proxy_pass http://new_pool;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
		proxy_connect_timeout 10;
		proxy_read_timeout 15;
    }

参考文档: