Maison > Article > Opération et maintenance > Comment utiliser nginx pour résoudre le problème de l'accès inter-domaines aux cookies
1. Écrit devant
Récemment, il est nécessaire de migrer les quatre projets de serveurs sur Alibaba Cloud vers un nouveau projet fourni par le client. Les quatre serveurs d'origine utilisaient des noms de domaine de premier niveau et des noms de domaine de deuxième niveau. Par exemple, aaa.abc.com, bbb.abc.com et ccc.abc.com. Parmi eux, aaa.abc.com se connecte en définissant les informations du cookie sur .abc.com. D'autres systèmes peuvent partager ce cookie. Cependant, aucun nom de domaine n'a été demandé parmi les quatre nouveaux serveurs, seulement quatre IP :
192.168.0.1 serveur d'authentification unique
192.168.0.2
192.168.0.3
192.168.0.4
car chaque serveur a deux projets utilisent tous l'authentification unique, la modification de la nouvelle méthode de connexion partagée prend donc trop de temps. J'ai donc recherché la connexion inter-domaines par cookie sur Internet, je l'ai essayé et j'ai défini le domaine plusieurs fois dans le signe unique 192.168.0.1. -sur serveur 2, 3 et 4, les résultats ne sont pas idéaux car le navigateur ne le permet pas. Plus tard, j'ai accidentellement vu que nginx pouvait partager des cookies par tromperie. J'ai donc pensé que la société d'origine avait déployé nginx et avait cet usage.
2. Configuration originale de nginx
Parlons d'abord de l'installation de nginx. Il existe de nombreux tutoriels sur Internet, je n'entrerai donc pas dans les détails. Ce qu'il faut noter, ce sont les différents withs après ./configure. J'ai rencontré quelques problèmes lors du processus de démarrage de la configuration :
nginx: [emerg] unknown directive "aio" in
plus --with-file-aio
Copiez le code Le code est le suivant :
démarrage de nginx. : nginx : [emerg] les sockets inet6 ne sont pas pris en charge sur cette plateforme dans « [::]:80 » du
Ajoutez --with-ipv6 à la fin pour faciliter les choses.
Une fois l'installation terminée. Principalement la configuration de nginx.conf
La configuration du serveur d'origine nginx.conf :
# for more information on configuration, see: # * official english documentation: http://nginx.org/en/docs/ # * official russian documentation: http://nginx.org/ru/docs/ user root; worker_processes 2; worker_cpu_affinity 1000 0100; error_log logs/error.log; pid logs/nginx.pid; events { worker_connections 2048; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; gzip on; gzip_min_length 1000; gzip_buffers 4 8k; gzip_types text/plain application/javascript application/x-javascript text/css application/xml; client_max_body_size 8m; client_body_buffer_size 128k; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include mime.types; default_type application/octet-stream; connection_pool_size 512; aio on; open_file_cache max=1000 inactive=20s; # load modular configuration files from the /etc/nginx/conf.d directory. # see http://nginx.org/en/docs/ngx_core_module.html#include # for more information. # 主要配置在这里,nginx.conf配置都是一样 include /usr/local/nginx/conf/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 ipv6only=on default_server; server_name _; root html; # load configuration files for the default server block. include /usr/local/nginx/conf/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
La configuration
conf.d/*.conf du serveur d'origine est reverse-proxy.conf
server { listen 80; server_name m.abc.com.cn; location / { root /usr/share/nginx/html/; index index.html index.htm; } location ~ \.(jsp|do)?$ { proxy_redirect off; 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_pass http://localhost:8084; } if ($http_user_agent ~* "qihoobot|baiduspider|googlebot|googlebot-mobile|googlebot-image|mediapartners-google|adsbot-google|feedfetcher-google|yahoo! slurp|yahoo! slurp china|youdaobot|sosospider|sogou spider|sogou web spider|msnbot|ia_archiver|tomato bot") { return 403; } access_log /home/logs/nginx/m.abc.com.cn_access.log; } server { listen 80; server_name store.abc.com.cn *.store.abc.com.cn; location / { proxy_redirect off; 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_pass http://localhost:8081; } access_log /home/logs/nginx/store.abc.com.cn_access.log; } server { listen 80; server_name shopcenter.abc.com.cn; location / { proxy_redirect off; 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_pass http://10.45.100.222:8082; } access_log /home/logs/nginx/shopcenter.abc.com.cn_access.log; } server { listen 80; server_name search.abc.com.cn; location / { proxy_redirect off; 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_pass http://10.45.100.68:8083; } access_log /home/logs/nginx/search.abc.com.cn_access.log; }
Après la configuration ci-dessus, après le démarrage de nginx, Accédez à différents serveurs en accédant à différents noms de domaine. Et parce qu’ils possèdent tous le nom de domaine de deuxième niveau .abc.com.cn. Les cookies peuvent donc être partagés.
La structure du fichier nginx est la suivante :
3. Configuration nginx modifiée
Principalement reverse-proxy.conf est différent
server { listen 9998; server_name 192.168.0.1:9998; location /servlets/ { proxy_redirect off; 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_pass http://192.168.0.1:8088; } location / { root /usr/local/nginx/html/web/; index index.html index.htm; } location ~ \.(jsp|do)?$ { proxy_redirect off; 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_pass http://192.168.0.1:8088; proxy_http_version 1.1; proxy_set_header upgrade $http_upgrade; proxy_set_header connection "upgrade"; proxy_read_timeout 700s; } if ($http_user_agent ~* "qihoobot|baiduspider|googlebot|googlebot-mobile|googlebot-image|mediapartners-google|adsbot-google|feedfetcher-google|yahoo! slurp|yahoo! slurp china|youdaobot|sosospider|sogou spider|sogou web spider|msnbot|ia_archiver|tomato bot") { return 403; } access_log /usr/local/nginx/logs/www.abc.com.cn_access.log; } server { listen 9994; server_name 192.168.0.1:9994; location / { proxy_redirect off; root /usr/local/nginx/html/weixin/; index index.html index.htm; } location ~ \.(jsp|do)?$ { proxy_redirect off; 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_pass http://localhost:8084; } if ($http_user_agent ~* "qihoobot|baiduspider|googlebot|googlebot-mobile|googlebot-image|mediapartners-google|adsbot-google|feedfetcher-google|yahoo! slurp|yahoo! slurp china|youdaobot|sosospider|sogou spider|sogou web spider|msnbot|ia_archiver|tomato bot") { return 403; } access_log /usr/local/nginx/logs/m.abc.com.cn_access.log; } server { listen 9990; server_name store.abc.com.cn *.store.abc.com.cn; location / { proxy_redirect off; 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_pass http://localhost:8081; } access_log /usr/local/nginx/logs/store.abc.com.cn_access.log; } server { listen 9992; server_name 192.168.0.1:9992; location / { proxy_redirect off; 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_pass http://192.168.0.2:8082; } access_log /usr/local/nginx/logs/shopcenter.abc.com.cn_access.log; } server { listen 9993; server_name 192.168.0.1:9993; location / { proxy_redirect off; 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_pass http://192.168.0.3:8083; } access_log /usr/local/nginx/logs/search.abc.com.cn_access.log; }
De cette façon, vous pouvez utiliser 192.168.0.1:9998 comme serveur unique et se connecter Les domaines suivants sont tous 192.168.0.1. Les autres 0.2 et 0.3 sont accessibles via différents ports de 192.168.0.1nginx et le serveur monopoint, de sorte que le nom de domaine de 0.1 peut être partagé.
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!