Chuyển hướng tất cả lưu lượng nginx sang SSL ngoại trừ một php duy nhất


0

Tôi có một trang web uy tín, tất cả đều bằng SSL. Vấn đề tôi gặp phải là việc trả lại cổng paymemnt không thể thực hiện được với SSL, vì vậy tôi phải tạo một ngoại lệ trên cấu hình nginx của mình để chấp nhận url gọi lại bằng HTTP.

Đây là những gì tôi đã cố gắng (không có may mắn):

server {
  listen 80;

  server_name example.com www.example.com;
  client_header_buffer_size 16k;
  large_client_header_buffers 16 16k;

  root /var/www/html/example.com;

  location / {  # the default location redirects to https
    return 301 https://$server_name$request_uri;
  }

  location ~ /validation.php$ {  # chapuza per redsys
    include       fastcgi.conf;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_buffer_size 32k;
    fastcgi_buffers 4 32k;
    fastcgi_read_timeout 300;
  }


}

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  include snippets/ssl-example.com.conf;
  include snippets/ssl-params.conf;

  server_name example.com www.example.com;

  ssl on;

  #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;


  root /var/www/html/example.com;

  # Try static files first, then php
  index index.html index.htm index.php;

  #Specify a charset
  charset utf-8;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 1;
    gzip_buffers 16 8k;
    gzip_http_version 1.0;
    gzip_types application/json text/css application/javascript;

  location ~ /validation.php$ {  # chapuza per redsys
    return 301 http://$server_name$request_uri;
  }

  rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;

  rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last;
  rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
  rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
  rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
  rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
  rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
  rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
  rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;

  rewrite ^/order$ /index.php?controller=order last;

  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php last;
  }

  # Redirect needed to "hide" index.php
  location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
  }

  location /c {
    rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/p/$1$2$3.jpg last;
    rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/p/$1$2.jpg last;
  }

  location /p {
    rewrite ^/p/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/p/$1$2$3.jpg last;
    rewrite ^/p/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/p/$1$2.jpg last;
  }

  location /images_ie {
    rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
  }


  # Don't log robots.txt or favicon.ico files
  location ~* ^/(favicon.ico|robots.txt)$ {
    access_log off;
    log_not_found off;
  }
  # Custom 404 page
  error_page 404 /index.php?controller=404;

#  location ~* ^.+.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv|xml) {
#    access_log off;
#    expires 30d;
#  }

  # Deny access to .htaccess
  location ~ /\.ht {
    deny all;
  }

  location ~ /.well-known {
       allow all;
  }

  # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
  location ~ \.php$ {
    include       fastcgi.conf;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_buffer_size 32k;
    fastcgi_buffers 4 32k;
    fastcgi_read_timeout 300;
  }



}

cuộc gọi lại là /example/test_dir/validation.php đi vào một vòng lặp

Lỗi của tôi ở đâu?

Cảm ơn


Chính xác URL là gì cho tập lệnh cổng thanh toán?
Tero Kilkanen

Hãy thử "location = /validation.php". Trong Nginx, trận đấu vị trí cụ thể nhất là trận đấu được chọn. Kiểm tra phần "cú pháp khối vị trí" của trang này digitalocean.com/community/tutorials/ triệt
Tim

Bạn có thể muốn xem xét dữ liệu nào có trong chuyển hướng và xem liệu có thể làm gì để thử và bảo mật dữ liệu hay không - trên mặt của nó, tôi đang thấy gateway cổng thanh toán ',' verify.php ', và văn bản gốc, và có vẻ như là một sự kết hợp tồi tệ của mọi thứ
iwaseatenbyagrue

Câu trả lời:


0

Vấn đề là ở đây:

location \.validation.php$ {  # chapuza per redsys

Bạn có một cú pháp biểu thức chính quy ở đây, ngoại trừ bạn đang thiếu ~để chỉ ra rằng nó nên được hiểu là biểu thức chính quy.

Sử dụng

location ~ \.validation\.php$ {  # chapuza per redsys

thay thế.

Sau đó, bạn đang gửi tiêu đề HSTS trong vị trí https của mình, thông báo cho khách hàng rằng tất cả các yêu cầu đến tên miền phải được thực hiện bằng https. Đây không phải là vấn đề nếu URL chỉ được truy cập bởi một khách hàng không quan tâm đến HSTS.

Tôi khuyên bạn nên tìm một giải pháp thanh toán sử dụng https với các giao dịch của nó.


Cảm ơn vì đã trả lời. Tôi đã thử, nhưng vẫn đi đến HTTPS. Tôi muốn có một cổng thanh toán với https, nhưng tôi không thể chọn ngân hàng của mình sử dụng redsys làm giải pháp, có phiên bản cũ của java
user2348511

Làm thế nào bạn kiểm tra rằng nó đi đến HTTPS? Tôi đã thêm một ký tự thoát vào regex, điều đó có nghĩa là chỉ cho phép một dấu chấm trước phptrong regex.
Tero Kilkanen

Tôi kiểm tra bằng cách đặt url của valition.php bằng http và nó chuyển hướng sang https, nếu tôi đặt bằng https thì nó vẫn ở https
user2348511

Tôi có nên xóa add_header Strict-Transport-Security "max-age = 31536000"; hàng?
dùng2348511

Nếu bạn muốn sử dụng tài nguyên đó với trình duyệt, thì bạn cần xóa tiêu đề HSTS, điều này buộc trình duyệt tải trang bằng https. Bạn cũng cần xóa bộ nhớ cache của trình duyệt. Nếu bạn không cần sử dụng với trình duyệt, hãy sử dụng công cụ chẩn đoán HTTP như curlđể kiểm tra xem giải pháp có hoạt động chính xác không.
Tero Kilkanen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.