一个前端的nginx之旅

前段时间买了个服务器和域名,开始折腾服务器。安装了node和nginx作为服务器容器,对于nginx的使用有了基本的了解,于是写了这篇文章,希望对大家有帮助。

这是我的博客地址:Sesine Blog

安装及命令

下载及安装、配置方法

下载地址:http://nginx.org/en/download.html

Linux环境下可以用命令直接安装

Windows环境下通过下载压缩包,很迷你只有1.33MB,解压后双击nginx.exe就可以直接运行

本文使用环境为windows

常用命令

首先得打开cmd(快捷键Win + R),cd命令进入nginx的安装目录

常用的命令:

  • nginx -v 查看nginx版本

  • nginx -t 验证配置文件是否正确,在启动或重启前建议执行此命令查看配置是否正确

  • start nginx 启动nginx

  • nginx -s stop 快速停止nginx

  • nginx -s quit 完整有序停止nginx并保存相关信息推荐

  • nginx -s reload 重新载入nginx

  • nginx -s reopen 重新打开日志文件

nginx遵循了unix哲学的缄默原则,运行成功不会有提示,出现错误时才会有信息

配置方法

配置文件在conf目录下,其中nginx.conf为主配置文件
本文所有配置都请写在http {}块内

解决跨域问题

跨域应该是日常工作中最常见的问题了,本地测试环境与api服务器环境属于两个域。由于浏览器的同源策略,在本地测试环境上的浏览器无法请求不是同一个域的api服务器的接口。这时候使用nginx可以很方便的解决这个问题,上线时也无需切换域名。

同源策略具体如下:

URL 说明 是否允许通信
http://www.domain.com/a.js http://www.domain.com/b.js 同一域名下 允许
http://www.domain.com/lab/a.js http://www.domain.com/script/b.js 同一域名下不同文件夹 允许
http://www.domain.com:8000/a.js http://www.domain.com/b.js 同一域名,不同端口 不允许
http://www.domain.com/a.js https://www.domain.com/b.js 同一域名,不同协议 不允许
http://www.domain.com/a.js http://88.88.88.88/b.js 域名和域名对应ip 不允许
http://www.domain.com/a.js http://static.domain.com/b.js 主域相同,子域不同 不允许
http://www.domain.com/a.js http://domain.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.domain.io/a.js http://www.domain.com/b.js 不同域名 不允许

具体代码如下:

server {
  #使用80端口
  listen       80;
  server_name  localhost;
  location / {
    #设置允许跨域,"*"代表全部,可以设置成具体域名如"domain.com www.domain.com"(建议设置两个,domain.com和www.domain.com为两个域)
    add_header 'Access-Control-Allow-Origin' *;
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET';
    #代理地址
    proxy_pass https://api.domain.com/;
  }
}

https配置

微信小程序强制要求所有请求都使用https协议,其实是因为App Store从17年开始强制要求使用https,现在很多主流网站比如BAT基本上都从http切换到了https,数据传输变得更加安全,而且可以有效避免运营商劫持(出现在网页中的运营商广告,移动的流量提示小球就是一个很好的例子)

https为什么安全,可以看一下这篇知乎提问,牟旭东同学回答的小和尚跟老和尚的故事挺有意思的。

哪里可以申请到免费的ssl证书?

来自BAT大厂,值得信赖

server {
  #https默认使用443端口
  listen 443;
  #域名名称,可设置成localhost不限域名
  server_name www.domain.com domain.com;
  #根目录
  root "D:\www\";
  #索引文件
  index  index.html index.htm;
  #是否开启目录浏览
  autoindex  off;

  #开启ssl
  ssl on;
  #设置ssl证书地址
  ssl_certificate   D:/ssl/certificate.pem;
  ssl_certificate_key  D:/ssl/certificate.key;
  #session有效时间
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
  ssl_prefer_server_ciphers on;
}

错误页面配置

nginx-error
nginx-error

如上图,nginx的错误页面是很简(jian)洁(lou)的

可以添加配置来自定义错误页面,首先要在https {}块中添加fastcgi_intercept_errors on;

然后使用如下的配置,使用location重新设置根目录,会指向到nginx安装目录下的html文件夹,这样子可以整个服务器使用统一的错误页面

如果要定义不同的可以将location删除,那么/404.html表示网站根目录下的404.html文件(不建议放在根目录)

server {
  #404错误 找不到资源
  error_page 404 /404.html;
  location = /404.html {
      root   html;
  }

  #403错误 资源不可用
  error_page 403 /403.html;
  location = /403.html {
      root   html;
  }

  #50x错误 服务器内部错误
  error_page   500 502 503 504  /500.html;
  location = /500.html {
      root   html;
  }
}

禁止ip访问

直接ip访问的问题

  • https证书警告,因为https的ssl证书是颁发给域名而不是ip地址的,在浏览器会出现不安全的警告
access-https-with-ip-error
access-https-with-ip-error
  • 访问统计数据不准确,由于一个ip可以绑定多个域名。如果直接用ip访问,统计访问很难定位准确的入口

  • 域名使用的是动态ip,ip更换后会无法访问

  • 法律限制,网站应该用域名访问,有些主机商会封未备案的服务器的80端口

那么如何防止ip直接访问呢?具体配置如下:

server {
  #设置为默认
  listen 80 default;
  listen 443 default;
  server_name _;
  
  #跳转至域名
  return https://domain.com;

  # 主站的ssl证书,https必须配置否则报错,http可以不添加以下三行
  ssl on;
  ssl_certificate   D:/ssl/certificate.pem;
  ssl_certificate_key  D:/ssl/certificate.key;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容