1. 앞에 작성
최근에는 Alibaba Cloud의 4개 서버 프로젝트를 고객이 제공한 새 프로젝트로 마이그레이션해야 합니다. 원래 4개 서버는 1차 도메인 이름과 2차 도메인 이름을 사용했습니다. 예를 들어 aaa.abc.com, bbb.abc.com 및 ccc.abc.com입니다. 그 중 aaa.abc.com은 쿠키의 정보를 .abc.com으로 설정하여 로그인합니다. 다른 시스템에서는 이 쿠키를 공유할 수 있습니다. 그러나 4개의 새로운 서버에는 도메인 이름이 적용되지 않고 4개의 IP만 있습니다:
192.168.0.1 Single Sign-On 서버
192.168.0.2
192.168.0.3
192.168.0.4
왜냐하면 각 서버에는 두 프로젝트 모두 싱글 사인온(Single Sign-On)을 사용하고 있어서 새로운 공유 로그인 방식을 수정하는데 시간이 너무 많이 걸려서 인터넷에서 쿠키 크로스 도메인 로그인을 검색해서 시도해보고 192.168.0.1 싱글 사인에서 도메인을 여러 번 설정했습니다. -서버 2, 3, 4개에서는 브라우저가 허용하지 않기 때문에 결과가 이상적이지 않습니다. 나중에 우연히 nginx가 속임수를 통해 쿠키를 공유할 수 있다는 것을 보았습니다. 그래서 원래 회사에서는 nginx를 배포하고 이런 용도를 갖고 있는 줄 알았습니다.
2. 원본 nginx 구성
먼저 nginx 설치에 대해 이야기하겠습니다. 인터넷에 많은 튜토리얼이 있으므로 Linux에서 nginx 설치 및 시작에 대해서는 자세히 설명하지 않겠습니다. 주목해야 할 것은 ./configure 이후의 다양한 with입니다. 구성 시작 프로세스 중에 몇 가지 문제가 발생했습니다:
nginx: [emerg] unknown directive "aio" in
plus --with-file-aio
코드 복사 코드는 다음과 같습니다:
nginx 시작 : nginx: [ emerg] inet6 소켓은 이 플랫폼에서
의 "[::]:80"에 지원되지 않습니다. --with-ipv6을 끝에 추가하면 더 쉽게 할 수 있습니다.
설치가 완료된 후. 주로 nginx.conf 구성
원래 서버 구성 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 { } } }
원래 서버
conf.d/*.conf 구성은 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; }
위 구성 후 nginx가 시작된 후, 다른 도메인 이름에 액세스하여 다른 서버에 액세스하세요. 그리고 모두 2차 도메인 이름인 .abc.com.cn을 갖고 있기 때문입니다. 따라서 쿠키를 공유할 수 있습니다.
nginx 파일 구조는 다음과 같습니다.
3. 수정된 nginx 구성
주로 reverse-proxy.conf가 다릅니다
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; }
이런 식으로 192.168.0.1:9998을 단일 포인트 서버로 사용할 수 있으며 로그인 다음 도메인은 모두 192.168.0.1입니다. 나머지 0.2와 0.3은 192.168.0.1nginx라는 서로 다른 포트와 단일 지점 서버를 통해 접근이 가능하므로 0.1이라는 도메인 이름을 공유할 수 있다.
위 내용은 nginx를 사용하여 쿠키 교차 도메인 액세스 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!