首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cors在码头内部署laravel时发出请求

cors在码头内部署laravel时发出请求
EN

Stack Overflow用户
提问于 2022-04-28 09:30:08
回答 1查看 420关注 0票数 -1

我有一个laravel应用程序,它运行在nginx代理管理器之后。laravel app在码头容器中运行,nuxt前沿也在另一个码头容器中运行。Laravel正在使用fortifysanctum包进行身份验证和会话验证。

问题是,当我试图使用假用户登录时。那么所有的飞行前请求,get请求都能很好地工作。但是,当我尝试为登录发出一个post请求时,它似乎运行得非常好。响应状态为200,如头中所示。但是说Access Control Allow Origin头丢失了,导致不出现响应的.

我错过了什么。问题在哪里?这似乎是一个常见的问题。

繁殖方法。

  • 尝试使用任何电子邮件id和密码登录,理想情况下,应该抛出422个错误以及验证错误消息。但是没有脚本/ cors错误的200来了

我已经试过了。

  • 我在我的laravel部署配置中添加了以下内容,这似乎解决了post问题,但是当使用/api/user(默认的神圣用户)获取用户详细信息时。然后401期就来了。这似乎不是一个有效的答案。(
代码语言:javascript
复制
    location / {
        try_files $uri $uri/ /index.php?$query_string;

        if ( $request_method = POST ) {          
            add_header 'Access-Control-Allow-Origin' 'https://codalay.in';         
            add_header 'Access-Control-Allow-Credentials' 'true'; 
        }
    }
  • 我尝试的另一种方法是在api.coalay.in的反向代理nginx配置中添加以下代码。然后cors错误更改。
代码语言:javascript
复制
# custom headers required for cors issues for laravel.
add_header Access-Control-Allow-Origin origin;
add_header Access-Control-Max-Age 3600;
add_header Access-Control-Expose-Headers Content-Length;
add_header Access-Control-Allow-Headers Range;

抛出

代码语言:javascript
复制
Reason: CORS header 'Access-Control-Allow-Origin' does not match 'https://codalay.in'

我正试图从10天内解决这个问题。请帮帮忙

编辑1:添加了我的配置文件后端docker-compose.yml

代码语言:javascript
复制
version: '3'

networks:
  laravel:
  nginx_reverse_proxy:
    external: true

services:
  codalay-nginx:
    image: nginx:stable-alpine
    container_name: nginx-codalay
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - codalay-php
      - codalay-mysql
    networks:
      - laravel
      - nginx_reverse_proxy

  codalay-mysql:
    image: mysql:8
    container_name: mysql
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: codalay
      MYSQL_USER: rex
      MYSQL_PASSWORD: 'somerandomstring'
      MYSQL_ROOT_PASSWORD: 'somerandomstring'
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    networks:
      - laravel
      - nginx_reverse_proxy

  codalay-php:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php
    volumes:
      - ./src:/var/www/html
    ports:
      - "9000:9000"
    networks:
      - laravel
      - nginx_reverse_proxy

  composer:
    image: composer:latest
    container_name: composer
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    depends_on:
      - codalay-php
    networks:
      - laravel
      - nginx_reverse_proxy

  npm:
    image: node:16
    container_name: npm
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    entrypoint: [ 'npm' ]
    networks:
      - nginx_reverse_proxy

  codalay-artisan:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: artisan
    volumes:
      - ./src:/var/www/html
    depends_on:
      - codalay-mysql
    working_dir: /var/www/html
    entrypoint: [ 'php', '/var/www/html/artisan' ]
    networks:
      - laravel
      - nginx_reverse_proxy

后端nginx配置:

代码语言:javascript
复制
server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;

        # if ( $request_method = POST ) {          
            add_header 'Access-Control-Allow-Origin' 'https://codalay.in';         
            add_header 'Access-Control-Allow-Credentials' 'true'; 
        # }
    }

    location ~ \.php$ {
        fastcgi_read_timeout 240;
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }


}

反向代理nginx配置

代码语言:javascript
复制
# ------------------------------------------------------------
# api.codalay.in
# ------------------------------------------------------------


server {
  set $forward_scheme http;
  set $server         "nginx-codalay";
  set $port           80;

  listen 80;
listen [::]:80;

listen 443 ssl http2;
listen [::]:443 ssl http2;


  server_name api.codalay.in;


  # Let's Encrypt SSL
  include conf.d/include/letsencrypt-acme-challenge.conf;
  include conf.d/include/ssl-ciphers.conf;
  ssl_certificate /etc/letsencrypt/live/npm-4/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/npm-4/privkey.pem;




# Asset Caching
  include conf.d/include/assets.conf;


  # Block Exploits
  include conf.d/include/block-exploits.conf;



  # HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years)
  add_header Strict-Transport-Security "max-age=63072000;includeSubDomains; preload" always;
  add_header Referrer-Policy strict-origin-when-cross-origin; 
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Frame-Options SAMEORIGIN;
  add_header Content-Security-Policy upgrade-insecure-requests;
  add_header Permissions-Policy interest-cohort=();
  add_header Expect-CT 'enforce; max-age=604800';
  more_set_headers 'Server: Proxy';
  more_clear_headers 'X-Powered-By';




# custom headers required for cors issues for laravel.
# add_header Access-Control-Allow-Origin origin;
# add_header Access-Control-Max-Age 3600;
# add_header Access-Control-Expose-Headers Content-Length;
# add_header Access-Control-Allow-Headers Range;

# proxy_redirect                      off;
# proxy_set_header X-Real-IP          $remote_addr;
# proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto  $scheme;
# proxy_read_timeout                  3600;
# proxy_connect_timeout               3600;

# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection 'upgrade';
# proxy_set_header Host $host;
# proxy_cache_bypass $http_upgrade;


    # Force SSL
    include conf.d/include/force-ssl.conf;




proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;


  access_log /data/logs/proxy-host-11_access.log proxy;
  error_log /data/logs/proxy-host-11_error.log warn;







  location / {

    



  # HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years)
  add_header Strict-Transport-Security "max-age=63072000;includeSubDomains; preload" always;
  add_header Referrer-Policy strict-origin-when-cross-origin; 
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Frame-Options SAMEORIGIN;
  add_header Content-Security-Policy upgrade-insecure-requests;
  add_header Permissions-Policy interest-cohort=();
  add_header Expect-CT 'enforce; max-age=604800';
  more_set_headers 'Server: Proxy';
  more_clear_headers 'X-Powered-By';




# custom headers required for cors issues for laravel.
# add_header Access-Control-Allow-Origin origin;
# add_header Access-Control-Max-Age 3600;
# add_header Access-Control-Expose-Headers Content-Length;
# add_header Access-Control-Allow-Headers Range;

# proxy_redirect                      off;
# proxy_set_header X-Real-IP          $remote_addr;
# proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto  $scheme;
# proxy_read_timeout                  3600;
# proxy_connect_timeout               3600;

# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection 'upgrade';
# proxy_set_header Host $host;
# proxy_cache_bypass $http_upgrade;


    
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;
    

    # Proxy!
    include conf.d/include/proxy.conf;
  }


  # Custom
  include /data/nginx/custom/server_proxy[.]conf;
}

编辑2:我用的是拉拉9。

EN

回答 1

Stack Overflow用户

发布于 2022-04-30 05:56:55

你好,这是我为nginx准备的laravel。

代码语言:javascript
复制
server {
    listen 80 ;
    listen [::]:80 ;
    root /pathtoproject/public;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name domainname;
    
    return 301 https://$host$request_uri;


}


server {
    listen 443 ssl http2;
    #listen [::]:443 ssl;

    ssl_certificate /var/www/keys/bundle.crt;
    ssl_certificate_key /var/www/keys/*.domain.key;



    root /pathtoproject/public;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name domainname.com;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    charset utf-8;
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_read_timeout 1800;
        # With php-cgi (or other tcp sockets):
        #fastcgi_pass 127.0.0.1:9000;
         proxy_read_timeout 5m; 

    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
    
}

这是我用于工作设置的anguler边脚本。使用api access作为domain.com/api/

代码语言:javascript
复制
server {
    listen 80;
    listen [::]:80;
    index index.html index.htm index.nginx-debian.html;

    server_name maindomain.com;
    return 301 https://$host$request_uri;

}
server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;
    index index.html index.htm index.nginx-debian.html;

    ssl_certificate /var/www/keys/bundle.crt;
    ssl_certificate_key /var/www/keys/*.domain.key;


    server_name maindomain.com;

    location / {
        proxy_pass http://127.0.0.1:4400;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    location ~ /\.(?!well-known).* {
        deny all;
    }
    
    location /api/ {
        proxy_pass https://api.domain.com;
    }
    location /storage/ {
        proxy_pass https://api.domain.com;
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72041288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档