关于Nginx
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
示例:
server
{
listen 80;
#80端口是http协议规定的标准默认端口,指的是服务器监听80端口,而不是客户端必须使用80端口。80端口只是一个标准,而并非强制规定。
#浏览器默认请求使用的是80端口,也就是我们的url中如果没有端口号,那么浏览器在发出请求时候默认使用的是80端口。
server_name aa.bb.cc;
#提供服务的域名主机号,即访问aa.bb.cc会匹配到此快,随后进行location块相关操作。
location / #这行指令指定了该location块将匹配根URL路径(即所有路径)。换句话说,这个配置将应用于所有请求。
{
proxy_pass http://localhost:9999; #告诉Nginx将匹配到的请求转发到http://localhost:15106
proxy_set_header Host $proxy_host; #设置了代理请求时的HTTP头部。为了确保被代理的服务器能正确解析主机名并提供正确的内容。
proxy_set_header X-Real-IP $remote_addr; #设置了一个名为X-Real-IP的HTTP头部,将客户端的真实IP地址传递给被代理的服务器。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #会将代理链中已存在的IP地址追加到头部,以便被代理的服务器能够了解请求的来源。
}
error_log /www/wwwlogs/admin_error.log;
access_log /www/wwwlogs/admin_access.log;
}
3、相关用法
可以通过修改 proxy_pass后的代码实现端口转发、域名转发等等操作
4、注意事项
为了保证网站的安全性和统一性,我开启了强制https连接,同时对于http连接配置了端口转发,确保所有的数据都是https访问的。因此也产生了新的问题:https使用的是443端口,如果要正确的配置子域名端口转发,需要在Nginx的server块中添加如下一行代码,确保https流量顺利访问。
listen 443 ssl;
由于使用了https协议,所以网站的ssl认证也是必不可少的,如果你使用的是Nginx作为防火墙,则还需要添加如下代码配置证书。(由于是子域名,指向的ip地址相同,则可以使用和父域名相同SSL证书)
ssl_certificate /path/to/your/pem/name_of_pem.pem;
ssl_certificate_key /path/to/your/key/name_of_key.key;
5、总结
至此,一个完整的端口转发代码块完成了,以下是一个完整的实例,仅供参考和理解:
server
{
listen 80;
listen 443 ssl;
server_name example.starry0214.one;
ssl_certificate /path/to/your/pem/name_of_pem.pem;
ssl_certificate_key /path/to/your/key/name_of_key.key;
location /
{
proxy_pass http://localhost:9999;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_log /www/wwwlogs/admin_error.log;
access_log /www/wwwlogs/admin_access.log;
}
Rattling nice pattern and superb subject matter, very little else we want : D.
?学不懂一点
666