我可以使用本教程https://gorails.com/deploy/ubuntu/18.04#nginx-passenger为我的 API配置 Nginx-Passenger-Rails5 并使用 Capistrano 进行部署。在尝试使用 Postman 并且 httpie 似乎工作后,唯一的问题是我在 React Native 上有一个应用程序并且 fetch 停止工作,只显示 401 Unauthorized。
我已经尝试将 Cors 添加到 Nginx 和 rails (application.rb) 在其他地方阅读,但仍然无法正常工作。
我的一些代码
server {
client_body_in_file_only on;
server_name api.my.server.name www.api.my.server.name;
root /home/deploy/funes-api/current/public;
passenger_enabled on;
passenger_app_env production;
location /cable {
passenger_app_group_name myapp_websocket;
passenger_force_max_concurrent_requests_per_process 0;
}
# Allow uploads up to 100MB in size
client_max_body_size 100m;
location ~ ^/(assets|packs) {
expires max;
gzip_static on;
}
ignore_invalid_headers off;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header "Access-Control-Expose-Headers" 'access-token,client,expiry,uid,token-type,Content-Type';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,access-token,client,expiry,uid,token-type';
# listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/api.funes.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/api.funes.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.my.server.name) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = api.my.server.name) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Expose-Headers' 'access-token,client-expiry,uid,token-type,Content-Type';
add_header 'Access-Control-Allow-Methods' '*';
add_header 'Access-Control-Allow-Headers' '*';
server_name api.my.server.name www.my.server.name;
return 404; # managed by Certbot
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*',
headers: :any,
expose: ['access-token', 'expiry', 'token-type', 'uid', 'client'],
methods: [:get, :post, :options, :delete, :put]
end
end
每次的响应只是显示 401 Unauthorized