文章目录
1,问题描述
1.1,当网页和后台是不同服务时会产生跨域问题
Access to XMLHttpRequest at 'http://ubuntu:9607/login' from origin 'http://www.anweimian.com' 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.2,跨域问题
同源策略会导致跨域问题
所谓"同源"指的是"三个相同"。
协议相同
域名相同
端口相同
http://www.example.com/dir2/other.html:同源
http://example.com/dir/other.html:不同源(域名不同)
http://v2.www.example.com/dir/other.html:不同源(域名不同)
http://www.example.com:81/dir/other.html:不同源(端口不同)
2,nginx端口转发解决跨域问题
2.1,下载并安装nginx
https://nginx.org/en/download.html
2.1.1,解压后如下所示
2.1.2,进入解压目录后,执行配置脚本
bash
./configure
HTTP rewrite 模块需要 PCRE 库的支持
bash
sudo apt-get install libpcre3-dev
安装好PCRE 库后再次执行 ./configure
2.2,编译安装
bash
sudo make -j
sudo make install
2.3,nginx使用
2.3.1,设置nginx开机自启动
bash
vim /etc/rc.local
文本底部追加
/usr/local/nginx/sbin/nginx
2.3.2,修改配置文件配置端口转发
bash
/usr/local/nginx/conf/nginx.conf
2.3.3,启动nginx
bash
sudo /usr/local/nginx/sbin/nginx
2.3.4,发现由于80端口被apache占用了,nginx无法启动
2.3.5,直接关闭apache,使用nginx托管静态网站代码
bash
sudo /etc/init.d/apache2 stop
bash
#重启nginx
sudo /usr/local/nginx/sbin/nginx -s reload
3,更新动态IP到nginx配置文件
bash
#!/usr/bin/bash
# 为 win 设置 wsl host
# win hosts 文件路径
# 获取 wsl2 的 ip
wsl_ip=$(ifconfig eth0 | grep -w inet | awk '{print $2}')
CHANGE_HOST()
{
HOST_NAME=$1
HOST_IP=$2
win_hosts_path="/mnt/c/Windows/System32/drivers/etc/hosts"
# 判断是否已存在 wsl2 的域名,如果存在则修改,否则追加
if grep -wq "$HOST_NAME" $win_hosts_path
then
# 此处因为权限问题没有直接用 sed 修改 hosts 文件
win_hosts=$(sed -s "s/.* $HOST_NAME/$HOST_IP $HOST_NAME/g" $win_hosts_path)
echo "$win_hosts" > $win_hosts_path
else
echo "$HOST_IP $HOST_NAME" >> $win_hosts_path
fi
}
CHANGE_NGINX_HOST_BY_PORT()
{
SERVER_PORT=$1
HOST_IP=$2
nginx_config_path="/usr/local/nginx/conf/nginx.conf"
# 判断是否已存在 wsl2 的域名,如果存在则修改,否则追加
if grep -wq "proxy_pass\|$SERVER_PORT" $nginx_config_path
then
# 此处因为权限问题没有直接用 sed 修改 hosts 文件
nginx_conf=$(sed -s "s/.*proxy_pass.*http:\/\/.*:$SERVER_PORT;/ proxy_pass http:\/\/$HOST_IP:$SERVER_PORT/g" $nginx_config_path)
echo "$nginx_conf" > $nginx_config_path
else
echo "$SERVER_PORT is not in $nginx_conf"
fi
}
CHANGE_HOST "www.anweimian.com" $wsl_ip
CHANGE_HOST "ubuntu" $wsl_ip
CHANGE_NGINX_HOST_BY_PORT "9607" $wsl_ip