Maison >développement back-end >tutoriel php >Exemple de configuration de websocket de proxy inverse Nginx

Exemple de configuration de websocket de proxy inverse Nginx

不言
不言original
2018-05-08 16:44:532852parcourir

Cet article présente principalement l'exemple de configuration du proxy inverse Nginx. Cet article est un résumé de la configuration réussie des exigences du projet. Les amis dans le besoin peuvent s'y référer

Il existe une exigence récente qui nécessite le. utilisation du websocket nginx reverse Proxy, après avoir recherché quelques informations, il a été testé et réussi Cet article ne fait qu'un seul enregistrement

Copiez le code Le code est le suivant :

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

1. Téléchargez le dernier code source de tengine

Copiez le code Le code est le suivant :

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

2. Installez les dépendances de base package

Copier le code Le code est le suivant :

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

3. Décompressez, compilez et installez

Copier le code Le code est le suivant :

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

La configuration de nginx.conf est comme suit :

Copiez le code Le code est le suivant :

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;
}

Contenu du fichier de configuration de test.com :

Copier le code Le code est le suivant :

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";
    }
}

Instructions d'analyse de la carte

Le rôle de la carte $http_upgrade $connection_upgrade dans la configuration nginx.conf ci-dessus, reportez-vous à http://www.ttlsa.com/nginx/using-nginx-map-method/

Cette fonction sert principalement à construire et modifier la valeur de $ connection_upgrade basé sur la valeur de $http_upgrade dans la demande du client, c'est-à-dire créez une nouvelle variable $connection_upgrade basée sur la valeur de la variable $http_upgrade. Les règles créées sont les éléments de {}, veuillez consulter Configuration :

<.>

Copier le code Le code est le suivant :

map $http_upgrade $connection_upgrade {
        default upgrade;
        &#39;&#39;      close;
    }
Les règles ne correspondent pas, donc la valeur par défaut est utilisée, c'est-à-dire que la valeur de $connection_upgrade sera toujours mise à niveau. Ensuite, si $http_upgrade est une chaîne vide, la valeur sera proche. Compréhension personnelle!

Recommandations associées :

Installation et configuration de Nginx et PHP six Guide de déploiement du proxy inverse et de l'équilibrage de charge Nginx

nginx reverse Le mécanisme de proxy résout les problèmes inter-domaines front-end

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn