Home  >  Article  >  Backend Development  >  Nginx reverse proxy websocket configuration example

Nginx reverse proxy websocket configuration example

不言
不言Original
2018-05-08 16:44:532705browse

This article mainly introduces Nginx reverse proxy websocket configuration examples. This article is a summary of the project requirements after successful configuration. Friends in need can refer to it

There is a recent requirement that requires the use of nginx reverse Proxy websocket, after searching some information, it has been tested and passed. This article only makes a record

Copy code The code is as follows:

注: 看官方文档说 Nginx 在 1.3 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必须升级到 1.3 以后的版本,
因此我这边是下载的 Tengine 的最新版本测试的

1. Download tengine Recent source code

Copy code The code is as follows:

wget http://tengine.taobao.org/download/tengine-2.0.3.tar.gz

2. Install basic dependenciesPackage

Copy code The code is as follows:

yum -y install pcre*
yum -y install zlib*
yum -y install openssl*

3. Unzip, compile and install

Copy code The code is as follows :

tar -zxvf tengine-2.0.3.tar.gz cd tengine-2.0.3 ./configure --prefix=安装目录 make sudo make install

nginx.conf configuration is as follows:

Copy code The code is as follows:

user apps apps;
worker_processes  4; # 这个由于我是用的虚拟机,所以配置的 4 ,另外 tengine 可以自动根据CPU数目设置进程个数和绑定CPU亲缘性
# worker_processes auto
# worker_cpu_affinity auto
error_log  logs/error.log;
pid        logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events {
    use epoll;
    worker_connections  65535;
}
# load modules compiled as Dynamic Shared Object (DSO)
#
#dso {
#    load ngx_http_fastcgi_module.so;
#    load ngx_http_rewrite_module.so;
#}
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 4k;
    large_client_header_buffers 4 32k;
    client_max_body_size 80m;
    sendfile on;
    tcp_nopush     on;
    client_body_timeout  5;
    client_header_timeout 5;
    keepalive_timeout  5;
    send_timeout       5;
    open_file_cache max=65535 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 1;
    tcp_nodelay on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    client_body_buffer_size  512k;
    proxy_connect_timeout    5;
    proxy_read_timeout       60;
    proxy_send_timeout       5;
    proxy_buffer_size        16k;
    proxy_buffers            4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    proxy_temp_path   /dev/shm/temp;
    proxy_cache_path  /dev/shm/cache levels=2:2:2   keys_zone=cache_go:200m inactive=5d max_size=7g;
    log_format log_access  '$remote_addr - $remote_user [$time_local] "$request" "$request_time" "$upstream_response_time"'
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for $host $hostname' ;
    #websocket 需要加下这个
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    include /home/apps/tengine/conf/test.com;
}

test. com configuration file content:

Copy code The code is as follows:

upstream test.com {
   server 192.168.1.5:9000;
}
server {
    listen       80;
    server_name  test.com;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location  ^~  /websocket {
        proxy_pass http://test.com;
        proxy_redirect    off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Parse the map command

nginx above For the function of map $http_upgrade $connection_upgrade in the .conf configuration, please refer to http://www.ttlsa.com/nginx/using-nginx-map-method/

This function is mainly based on the $ in the client request The value of http_upgrade is used to construct and change the value of $connection_upgrade, that is, a new variable $connection_upgrade is created based on the value of the variable $http_upgrade. The rules created are the contents of {}, please see configuration:

Copy Code The code is as follows:

map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

The rules are not matched, so the default is used, that is, the value of $connection_upgrade will always be upgrade. Then if $http_upgrade is an empty string, the value will be close. Personal understanding!

Related recommendations:

Nginx and PHP Installation and Configuration Six Nginx Reverse Proxy and Load Balancing Deployment Guide

nginx Reverse The proxy mechanism solves front-end cross-domain issues

The above is the detailed content of Nginx reverse proxy websocket configuration example. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn