在配置nginx反向代明白决跨域问题时,为什么location /api背面的/api 这个 ...

打印 上一主题 下一主题

主题 534|帖子 534|积分 1602

在 Nginx 配置中,proxy_pass 指令中的路径会影响到请求的转发方式。当你在 location 中界说了 /api 路径时,如果你在 proxy_pass 中也包罗了 /api,那么请求将会按照这样的方式进行转发:
假设你在 Nginx 中配置了如下的 location 和 proxy_pass:
  1. location /api {
  2.     proxy_pass http://backend.server;
  3. }
复制代码
当前端发起请求 www.example.com/api/data 时,Nginx 将会将这个请求转发到 http://backend.server/api/data。
这种举动是由于在 proxy_pass 中如果包罗了路径,如 /api 在这里,Nginx 将保存原始请求中的 URI (Uniform Resource Identifier),除非你在 proxy_pass 中指定了一个新的 URI 来覆盖这个举动。这对于像 API Gateway 这样需要转发或者修改请求的服务来说非常有用。
如果你希望在转发请求时不包括类似 /api 这样的路径段,你可以在 proxy_pass 中使用反斜杠 / 来覆盖这个举动,如下所示:
  1. location /api {
  2.     proxy_pass http://backend.server/;
  3. }
复制代码
这样,当前端请求 www.example.com/api/data 时,Nginx 将会将请求转发到 http://backend.server/data,而不会包罗原始请求的路径段 /api。
总之,proxy_pass 指令中的路径部门会影响请求的转发路径格式,进而影响后端服务器收到请求的 URI 结构。
全部配置
  1. #user  nobody;
  2. worker_processes 8;
  3. #error_log  logs/error.log;
  4. #error_log  logs/error.log  notice;
  5. #crit
  6. #error_log  logs/error.log  info;
  7. error_log /usr/local/nginx/logs/nginx_error.log error;
  8. pid /usr/local/nginx/logs/nginx.pid;
  9. worker_rlimit_nofile 65535;
  10. events {
  11.     use epoll;
  12.     worker_connections 2048;
  13. }
  14. http {
  15.     include mime.types;
  16.     default_type application/octet-stream;
  17.     log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  18.     '$status $body_bytes_sent "$http_referer" '
  19.     '"$http_user_agent" "$http_x_forwarded_for"';
  20.     #access_log  logs/access.log  main;
  21.     sendfile on;
  22.     #tcp_nopush     on;
  23.     tcp_nopush on; #仅依赖于sendfile使用,能够使得Nginx在一个数据包中尝试发送响应头,以及在数据包中发送一个完整文件
  24.     tcp_nodelay on; #启用或禁用TCP_NODELAY选项,用于keep-alive连接
  25.     #keepalive_timeout  0;
  26.     keepalive_timeout 300;
  27.     #gzip  on;
  28.     gzip on;
  29.     gzip_min_length 1k;
  30.     gzip_buffers 4 16k;
  31.     #gzip_http_version 1.1;
  32.     gzip_comp_level 5;
  33.     gzip_types text/plain application/x-javascript application/javascript text/css application/xml image/jpeg image/gif image/png;
  34.     #gzip_vary on;
  35.     gzip_disable "MSIE [1-6]\."; #IE1-6版本不支持gzip压缩
  36.     proxy_connect_timeout 75;
  37.     proxy_read_timeout 300;
  38.     proxy_send_timeout 300;
  39.     proxy_buffer_size 64k;
  40.     proxy_buffers 4 64k;
  41.     proxy_busy_buffers_size 128k;
  42.     proxy_temp_file_write_size 128k;
  43.     client_max_body_size 100m;
  44.     server_tokens off;
  45.     proxy_temp_path /usr/local/nginx/temp;
  46.     #用于指定本地目录来缓冲较大的代理请求
  47.     #设定负载均衡的服务器列表
  48.     upstream myweb {
  49.         #weigth参数表示权值,权值越高被分配到的几率越大
  50.         #                ip_hash;
  51.         server 172.26.5.6:5210 weight=1 max_fails=2 fail_timeout=30s;
  52.         server 172.26.5.6:6610 weight=1 max_fails=2 fail_timeout=30s;
  53.         #  server 172.26.136.135:4310 weight=1 max_fails=2 fail_timeout=30s;
  54.     }
  55.     upstream mp {
  56.         server 172.26.5.6:2300 weight=1 max_fails=2 fail_timeout=30s;
  57.     }
  58.     upstream mylocal {
  59.         #weigth参数表示权值,权值越高被分配到的几率越大
  60.         #               ip_hash;
  61.         server 172.26.5.6:3310 weight=1 max_fails=2 fail_timeout=30s;
  62.     }
  63.     server {
  64.         listen 80;
  65.         listen [::]:80; ## ipv6 support
  66.         server_name _;
  67.         #charset koi8-r;
  68.         rewrite ^(.*) https://www.j.com$1 permanent;
  69.         #access_log  logs/host.access.log  main;
  70.         #       location / {
  71.         #                        proxy_set_header Host $proxy_host;
  72.         #                        proxy_set_header  X-Real-IP  $remote_addr;
  73.         #                        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
  74.         #                        access_log  logs/webaccess.log  main ;
  75.         #                        client_max_body_size 20m;
  76.         #                        proxy_read_timeout 1500;
  77.         #                        client_body_buffer_size  256k;
  78.         #                        proxy_buffer_size 64k;
  79.         #                        proxy_buffers 4  64k;
  80.         #                        proxy_busy_buffers_size  128k;
  81.         #                        proxy_temp_file_write_size  256k;
  82.         #                        proxy_pass http://myweb/;
  83.         #                }
  84.         location /console/ {
  85.             proxy_set_header Host $proxy_host;
  86.             proxy_set_header X-Real-IP $remote_addr;
  87.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  88.             access_log logs/consoleaccess.log main ;
  89.             client_max_body_size 20m;
  90.             proxy_read_timeout 1500;
  91.             client_body_buffer_size 256k;
  92.             proxy_buffer_size 64k;
  93.             proxy_buffers 4 64k;
  94.             proxy_busy_buffers_size 128k;
  95.             proxy_temp_file_write_size 256k;
  96.             proxy_pass http://mylocal/;
  97.         }
  98.         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  99.             proxy_pass http://myweb;
  100.             expires 7d;
  101.         }
  102.         location ~ .*\.(js|css)$ {
  103.             proxy_pass http://myweb;
  104.             expires 7d;
  105.         }
  106.         # redirect server error pages to the static page /50x.html
  107.         #
  108.         error_page 404 403 500 502 503 504 /404.html;
  109.         location = /404.html {
  110.             root /usr/local/nginx/html;
  111.             index 404.html;
  112.         }
  113.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  114.         #
  115.         #location ~ \.php$ {
  116.         #    proxy_pass   http://127.0.0.1;
  117.         #}
  118.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  119.         #
  120.         #location ~ \.php$ {
  121.         #    root           html;
  122.         #    fastcgi_pass   127.0.0.1:9000;
  123.         #    fastcgi_index  index.php;
  124.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  125.         #    include        fastcgi_params;
  126.         #}
  127.         # deny access to .htaccess files, if Apache's document root
  128.         # concurs with nginx's one
  129.         #
  130.         #location ~ /\.ht {
  131.         #    deny  all;
  132.         #}
  133.     }
  134.     server {
  135.         listen 443 ssl;
  136.         listen [::]:443 ssl;
  137.         # listen [::]:443;
  138.         server_name j.com www.j.com;
  139.         #ssl on;
  140.         ssl_certificate /usr/local/nginx/crt/j.com.pem;
  141.         ssl_certificate_key /usr/local/nginx/crt/j.com.key;
  142.         ssl_protocols TLSv1.1 TLSv1.2;
  143.         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  144.         ssl_session_cache shared:SSL:10m;
  145.         ssl_session_timeout 10m;
  146.         ssl_stapling on;
  147.         ssl_stapling_verify on;
  148.         ssl_prefer_server_ciphers on;
  149.         location / {
  150.             proxy_set_header Host $proxy_host;
  151.             proxy_set_header X-Real-IP $remote_addr;
  152.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  153.             access_log logs/webaccess.log main ;
  154.             client_max_body_size 20m;
  155.             proxy_read_timeout 1500;
  156.             client_body_buffer_size 256k;
  157.             proxy_buffer_size 64k;
  158.             proxy_buffers 4 64k;
  159.             proxy_busy_buffers_size 128k;
  160.             proxy_temp_file_write_size 256k;
  161.             proxy_pass http://myweb/;
  162.             #
  163.         }
  164.         location /docs {
  165.             root /app;
  166.             charset utf-8;
  167.             index index.htm index.html;
  168.         }
  169.         location /jlrcwpages {
  170.             root /app;
  171.             charset utf-8;
  172.             index index.htm index.html;
  173.         }
  174.         location /ysxRtxF72U.txt {  
  175.             root /app/txt;  
  176.             charset utf-8;  
  177.         }
  178.         
  179.         location /api {
  180.             proxy_pass https://hr.j.com;
  181.             proxy_set_header Host $host;
  182.             proxy_set_header X-Real-IP $remote_addr;
  183.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  184.    
  185.             # 允许跨域请求
  186.             add_header 'Access-Control-Allow-Origin' '*';
  187.             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  188.             add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
  189.    
  190.             if ($request_method = 'OPTIONS') {
  191.                 add_header 'Access-Control-Max-Age' 1728000;
  192.                 add_header 'Content-Type' 'text/plain; charset=utf-8';
  193.                 add_header 'Content-Length' 0;
  194.                 return 204;
  195.             }
  196.         }
  197.     }
  198. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表