Nginx

CentOS安装Nginx

配置Nginx源

[zhangpeng@27ops ~]$ cat /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[zhangpeng@27ops ~]$ 

清理yum配置

yum clean all && yum makecache

安装Nginx

yum -y install nginx

新增配置文件

# 1.注意替换自己的域名
# 2.rewrite ^(.*)$  https://ai.27ops.com$1 :使通过http访问跳转为https,状态码302
# 3.需要配置自己的证书
[zhangpeng@27ops ~]$ sudo vim /etc/nginx/conf.d/27ops.com_ai.conf 
server {  
    listen 80;  
    server_name ai.27ops.com;   
    rewrite ^(.*)$  https://ai.27ops.com$1 ;  
}
server {
  listen       443 ssl http2;
  server_name  ai.27ops.com;
  access_log off;
  index index.html index.htm index.php;
  root /var/www/html/love;
  ssl_certificate      /etc/nginx/certs/*.27ops.com/fullchain.cer;
  ssl_certificate_key  /etc/nginx/certs/*.27ops.com/*.27ops.com.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_stapling on;
  ssl_stapling_verify on; 

  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }
  location ~ /\.ht {
    deny all;
  }
}
[zhangpeng@27ops ~]$ 

启动Nginx

systemctl start nginx && systemctl enable nginx

在服务器上检查

#注意更换自己的域名
[zhangpeng@27ops ~]$ curl -v ai.27ops.com
* About to connect() to ai.27ops.com port 80 (#0)
*   Trying 47.240.39.54...
* Connected to ai.27ops.com (47.240.39.54) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: ai.27ops.com
> Accept: */*
> 
< HTTP/1.1 302 Moved Temporarily
< Server: nginx/1.18.0
< Date: Tue, 02 Feb 2021 12:15:18 GMT
< Content-Type: text/html
< Content-Length: 145
< Connection: keep-alive
< Location: https://ai.27ops.com/
< 
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
* Connection #0 to host ai.27ops.com left intact
[zhangpeng@27ops ~]$ 

域名转发

将v.27ops.com请求转发到https://www.ldoceonline.com/

通过访问v.27ops.com跳转到https://www.ldoceonline.com/

[root@zhangpeng ~]# cat /etc/nginx/conf.d/27osps.com_v.conf 
server {

    server_name v.27ops.com;

    location / {
        return 302 https://www.ldoceonline.com/; 
    }
}
[root@zhangpeng ~]# 

URL域名跳转

将v.27ops.com/trans完全转发到https://www.ldoceonline.com/translator/

例如,访问v.27ops.com/trans 需要跳转到https://www.ldoceonline.com/translator/

server {

    server_name v.27ops.com; # v.27ops.com/trans改为跳转前的域名

    location / {
        return 302 https://www.ldoceonline.com/translator$request_uri; # https://www.ldoceonline.com 改为跳转后域名
    }
}

参考链接

解决CORS error(跨域资源共享错误)

问题来源

我通过自建cos源tke.27op.com,托管本博客(tke.27ops.com)/user.json(http://tke.27ops.com/user.json)的静态文件,引用json文件时,出现了CORSerror(跨域资源共享错误)

了解CORS

通过了解CORS并解决CORS error。

跨源资源共享(CORS)

跨源资源共享 (CORS)(或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的"预检"请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头。

跨源HTTP请求的一个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求。

出于安全性,浏览器限制脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一个域请求 HTTP 资源,除非响应报文包含了正确 CORS 响应头。

来自(developer.mozilla.org)

所以,问题就在于。我们没有给另一台服务器的响应头部(header)中添加一些信息,告诉浏览器这些资源文件可以被引用来源站点“安全”的使用,导致浏览器就不会正常加载这些资源了,这样就发生了跨域请求错误。

解决

1.在cdn的http-header(自定义响应header头)添加:

Access-Control-Allow-Origin * 删除
Access-Control-Expose-Headers X-Requested-With 删除
Access-Control-Allow-Methods GET,POST,OPTIONS 删除

2.在nginx的http中添加如下代码:

#support cross domain access
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

复制

总结

记得清除浏览器缓存,否则CORS error 即使你修复了,由于缓存还是显示CORS error