1、官网下载
官网:nginx: download
2、解压到目标文件夹
3、配置
(1)进入到Nginx目录下,conf文件夹下编辑nginx.conf文件,根据自己的需求进行配置
(2)配置文件默认内容参数解析
#默认为1,表示开启一个业务进程。根据服务器核数来配置,一般1个核对应1个进程
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
events {
#单个业务进程可接受连接数
worker_connections 1024;
}
http {
#引入http mime类型,引入在conf文件下的mime.types文件,让浏览器知道识别文件后缀名后该如何展示
include mime.types;
#如果mime类型没匹配上,默认使用二进制流的方式传输。
default_type application/octet-stream;
#使用高效网络传输,也就是数据0拷贝,直接传输数据。未开启sendfile
sendfile on;
#保持链接时间
keepalive_timeout 65;
#vhost虚拟主机
server {
#监听端口号
listen 80;
#主机名\域名
server_name localhost;
#匹配路径url,样例:http://nginx.org/en/download.html
location / {
#文件根目录,相对于nginx安装根目录路径
root html;
#默认页名称,访问先到访页面
index index.html index.htm;
}
#服务端报错后报错编码对应页面。样例:http://nginx.org/50x.html
error_page 500 502 503 504 /50x.html;
#报错后识别到域名后面跟了/50x.html,则匹配到根目录root下的html文件夹
location = /50x.html {
root html;
}
}
}
(3)搭建站点(注意下面的站点是nginx默认的原页面)
#vhost虚拟主机
client_max_body_size 100M;
server {
#监听端口号
listen 80;
#主机名\域名
server_name localhost;
#charset koi8-r;
#a***ess_log logs/host.a***ess.log main;
#匹配路径url,样例:http://nginx.org/en/download.html
#==================== 路由配置开始 ===========================
# 默认原始配置方式
location / {
#文件根目录,相对于nginx安装根目录路径
root html;
#默认页名称,访问先到访页面
index index.html index.htm;
}
(4)其他配置
根据文件类型设置过期时间
location ~.*\.css$ {
expires 1d;
break;
}
location ~.*\.js$ {
expires 1d;
break;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
a***ess_log off;
expires 15d; #保存15天
break;
}
# curl -x127.0.0.1:80 http://www.test.***/static/image/***mon/logo.png -I #测试图片的max-age
禁止文件缓存
location ~* \.(js|css|png|jpg|gif)$ {
add_header Cache-Control no-store;
}
防盗链
location ~* \.(gif|jpg|png)$ {
# 只允许 192.168.0.1 请求资源
valid_referers none blocked 192.168.0.1;
if ($invalid_referer) {
rewrite ^/ http://$host/logo.png;
}
}
静态文件压缩
server {
# 开启gzip 压缩
gzip on;
# 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
gzip_http_version 1.1;
# 设置压缩级别,压缩级别越高压缩时间越长 (1-9)
gzip_***p_level 4;
# 设置压缩的最小字节数, 页面Content-Length获取
gzip_min_length 1000;
# 设置压缩文件的类型 (text/html)
gzip_types text/plain application/javascript text/css;
}
指定定错误页面
# 根据状态码,返回对于的错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /source/error_page;
}
4、验证
(1)切换到 Nginx 安装目录下,双击 Nginx.exe 启动 Nginx
(2)打开浏览器,输入 `http://127.0.0.1/` (具体端口看个人配置,默认配置文件端口:80)出现以下界面说明配置成功
(3)如果需要修改配置文件,则需要重新启动 Nginx,首先 Ctrl + Shift + Esc,打开任务管理器,找个 Nginx 服务,结束任务,然后切换到 Nginx 安装目录下,双击 Nginx.exe 启动 Nginx
也可以使用bat命令直接重启
taskkill /f /t /im nginx.exe
start nginx
5、文件夹映射
(1)进行nginx.conf修改,添加下面的代码
#文件夹路径映射
location /reportDownload{
alias E:/opt/project/generateFiles/;
default_type application/octeft-stream;
if ($request_filename ~* ^.*?/.(zip|apk|ipa)$)
{
add_header Content-Disposition: 'attachmet;';
}
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset UTF-8,ASCII,GBK; # 避免中文乱码
}
目的:将 E:/opt/project/generateFiles/ 映射到ip端口上,使得局域网能访问本台服务器下面的文件
(2)点击reloadNginx.bat重启nginx
(3)打开浏览器进行访问指定文件,注意路径要用ip+/reportDownload +文件路径 即可进行访问,实现局域网内文件夹共享。pdf文件可以直接进行打开浏览,docx文件需要进行本地下载。
6、其他问题
(1)常用命令
nginx -s stop # 快速关闭Nginx,可能不保存相关信息,并迅速终止Web服务。
nginx -s quit # 平稳关闭Nginx,保存相关信息,有安排的结束Web服务。
nginx -s reload # 因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen # 重新打开日志文件。
nginx -c filename # 为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t # 不运行,而仅仅测试配置文件。Nginx将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
nginx -V # 显示 nginx 的版本,编译器版本和配置参数。
taskkill /f /t /im nginx.exe # 彻底关闭nginx(关闭Nginx其他服务,这样才能彻底关闭)
nginx -s reload # 重新加载配置
(2)跨域问题
跨域的定义
[同源策略](https://so.csdn.***/so/search?q=同源策略&spm=1001.2101.3001.7020)限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。通常不允许不同源间的读操作。
同源的定义
如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
Nginx 解决跨域的原理
例如:
前端 server 域名为:http://font_server
后端 server 域名为:https://github.***
现在 http://domain 对 http://font_server发起请求一定会出现跨域。
只需要启动一个 Nginx 服务器,将 server_name 设置为 font_server,然后设置相应的 location 以拦截前端需要跨域的请求,最后将请求代理回 github.***。配置如下:
## 配置反向代理的参数
server {
listen 8080;
server_name font_server
## 1. 用户访问 http://font_server,则反向代理到 https://github.***
location / {
proxy_pass https://github.***;
proxy_redirect off;
proxy_set_header Host $host; # 传递域名
proxy_set_header X-Real-IP $remote_addr; # 传递IP
proxy_set_header X-Scheme $scheme; # 传递协议
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}