Linux 分布式微服务问题集锦

122 阅读1分钟

现如今,硬件成本越来越低,在高可用,高性能,高并发越来越紧迫的时代,分布式微服务成为很多架构师不得不考虑的架构。所带来的问题也越来越复杂。

1. 前后端分离,跨域错误如何解决?

Access to XMLHttpRequest at 'http://192.168.1.3:8080/auth/login' from origin 'http://192.168.8.7' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

1.1 服务端解决


/**
 * 拦截器配置
 *
 * @author test
 */
public class WebMvcConfig implements WebMvcConfigurer{

    @Override
    public void addCorsMappings(CorsRegistry registry){
        // 设置允许跨域的路径
        registry.addMapping("/**")
                // 设置允许跨域请求的域名
                .allowedOrigins("")
                // 是否允许证书
                .allowCredentials(true)
                // 设置允许的方法
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                // 设置允许的header属性
                .allowedHeaders("*")
                // 跨域允许时间
                .maxAge(3600);
    }

}

1.2 前端解决(nginx)

/etc/nginx/nginx.conf

...
# 服务器端
    server {
      location /prod-api/{
        add_header 'Access-Control-Allow-Origin' $http_origin;
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
       	add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
        if ($request_method = 'OPTIONS') {
          add_header 'Access-Control-Max-Age' 3600;
          add_header 'Content-Type' 'application/json; charset=utf-8';
          add_header 'Content-Length' 0;
          return 204;
       	}

      }
    }
...

1.3 网关解决

www.cnblogs.com/mikey1988/p…

2 https协议本地如何测试?

借用 ngrok.com/ 的免费账号,本地安装客户端程序来测试就可

3 gitlab运行时间长了,会发生git占用cpu居高该怎么办?

首先,通过以下命令查看日志中是否发生错误。

cat /var/log/gitlab/gitlab-workhorse/current

3.1 子日志:Nginx

cat /var/log/gitlab/nginx/gitlab_access.log

3.2 子日志:redis-exporter

cat /var/log/gitlab/redis-exporter/current

3.3 子日志:gitlab-exporter

cat /var/log/gitlab/gitlab-exporter/current

3.4 子日志:redis

cat /var/log/gitlab/redis/current

3.5 问题发现

/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket拒绝访问

3.6 解决思路

  • 删除gitlab.socket
  • 赋予git权限
chown -h git:git /opt/gitlab/embedded/service/gitlab-rails/.gitlab_workhorse_secret 
chown git:git /var/opt/gitlab/gitlab-rails/etc/gitlab_workhorse_secret
  • 重启服务
gitlab-ctl stop && gitlab-ctl restart && gitlab-ctl reconfigure
  • 如果还没效果的话,可以重启机器
reboot