nginx同一个端口配置多个网站(以及nginx跨域配置)

本文详细介绍了如何配置Nginx服务器来支持多个站点,并解析PHP请求。包括配置文件的路径设置、域名映射、跨域配置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,先看一下nginx.conf文件,如果有下面的一行
include /etc/nginx/sites-enabled/*;
表示配置文件加载sites-enabled下的文件。
二,修改/etc/nginx/sites-enabled下的default文件
内容如下

server {
        listen 80;
        root /usr/share/nginx/html/front-api/public;
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html index.php;
        server_name front.web.com;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$query_string;
                //上面这一行,是解析动态网址,如果是需要访问静态网址的话,就改成try_files $uri $uri/ =404;
        }
        location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9000;
         # fastcgi_pass   unix:/run/php/php7.2-fpm.sock;//如果使用上面的9000端口地址访问出错502的话,就换成这个(注意该sock文件的权限问题)
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        #   fastcgi_param  PATH_INFO  $fastcgi_path_info;
        #   fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
}

server {
        listen 80;
        root /usr/share/nginx/html/back-api/public;
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html index.php;
        server_name back.web.com;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$query_string;
                //上面这一行,是解析动态网址,如果是需要访问静态网址的话,就改成try_files $uri $uri/ =404;
        }
        location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9000;
        #  fastcgi_pass   unix:/run/php/php7.2-fpm.sock;//如果使用上面的9000端口地址访问出错502的话,就换成这个(注意该sock文件的权限问题)
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        #   fastcgi_param  PATH_INFO  $fastcgi_path_info;
        #   fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
}

三,
sudo vi /etc/hosts
添加如下内容

127.0.0.1        front.web.com;
127.0.0.1        back.web.com;

四,重启nginx sudo /etc/init.d/nginx restart

五,本地,打开C:\Windows\System32\drivers\etc\hosts
如果无法修改,需要右键,属性,修改其文件权限。
修改添加内容如下

	127.0.0.1   128.1.2.41
	127.0.0.1  	front.web.com;
	127.0.0.1 	back.web.com;

OK了!

nginx跨域配置如下:

server {

listen       80;
server_name  192.168.100.76;
index index.php index.html;
root "D:/worker/sdgf_huodong/public";

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

location ~ \.php(.*)$ {
	if ($request_method = OPTIONS ) {
	add_header Access-Control-Allow-Origin "*";
	add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";
	add_header Access-Control-Max-Age "3600";
	add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, token";
	add_header Access-Control-Allow-Credentials "true";
	add_header Content-Length 0;
	add_header Content-Type text/plain;
	return 200;
}
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, token*';
}

}

### 配置 Nginx 允许多个 IP 访问 为了使 Nginx 支持来自多个特定 IP 的请求,可以利用 `map` 模块定义一系列规则来匹配这些 IP 地址,并将其映射到相应的响应头部。具体做法如下: #### 使用 Map 定义 IP 白名单 在 HTTP 块中加入一段用于创建自定义变量 `$allowed_ip` 的配置,该变量会依据客户端的真实 IP 是否属于预设列表而被赋予不同的值。 ```nginx http { ... # 创建一个名为 allowed_ip 的变量用来存储允许的 CORS 请求源 map $remote_addr $allowed_ip { default ""; # 默认为空字符串表示不允许任何地址 "192.168.1.10"; # 明确列出每一个可信任的具体 IPv4 地址 "192.168.1.11"; "~^(10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.)" "$remote_addr"; # 正则表达式形式支持整个私有网段内的任意主机作为合法来源 } } ``` 上述代码片段展示了如何通过正则表达式模式匹配的方式将某些内部网络中的设备纳入许可范围之内[^4]。 #### 设置 Location 中的相关 Header 接着,在对应站点的服务区块里应用这个新建立好的变量至实际返回给前端浏览器端的安全策略头字段之中: ```nginx server { listen 80; server_name example.com; location /api/ { if ($allowed_ip != "") { add_header 'Access-Control-Allow-Origin' "$allowed_ip"; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,B Cache-Control,Content-Type'; # 对于非简单请求(如PUT DELETE),还需要处理OPTIONS方法预检请求 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } } try_files $uri $uri/ =404; } } ``` 这段脚本说明了怎样根据之前设定的条件动态调整响应消息里的CORS相关属性,从而确保只有那些经过验证后的远程连接才能成功执行站资源共享操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值