前言
Nginx 是什么
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
一 安装使用
-
1.1 linux系统安装:
Ubuntu: sudo apt install nginx
Centos: yum install nginx
自动安装的路径在/ect/nginx/
启动:sudo service nginx start
查看版本:sudo nginx -v
查看配置是否正确:sudo nginx -t
root@ubuntu:/# sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重读配置文件:nginx -s reload
完成配置 Nginx 后,运行 sudo nginx -t 来验证配置文件的语法。 如果配置文件测试成功,可以通过运行 sudo nginx -s reload 强制 Nginx 选取更改
也可以使用systemctl管理Nginx服务:
您可以像任何其他systemd单位一样管理Nginx服务。 要停止Nginx服务,请运行:
sudo systemctl stop nginx
要再次启动,请键入:
sudo systemctl start nginx
重新启动Nginx服务:
sudo systemctl restart nginx
在进行一些配置更改后重新加载Nginx服务:
sudo systemctl reload nginx
如果你想禁用Nginx服务在启动时启动:
sudo systemctl disable nginx
并重新启用它:
sudo systemctl enable nginx
-
1.2 windows 系统上安装使用
到nginx官网(http://nginx.org/en/download.html
)上下载相应的安装包,解压即可。
启动:
直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx
关闭:
nginx -s stop
或者 nginx -s quit
stop表示立即停止nginx,不保存相关信息
quit表示正常退出nginx,并保存相关信息
重启(因为改变了配置,需要重启)
nginx -s reload
查看配置是否正确: nginx -t
安装时常见错误:
- 80端口被占用
nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
- 2 nginx: [error] invalid PID number "" in "D:\nginx-1.17.6/logs/nginx.pid"
执行:nginx -c D:\nginx-1.17.6\conf\nginx.conf
- 3.nginx: [error] CreateFile() "D:\nginx-1.17.6/logs/nginx.pid" failed (2: The system cannot find the file specified)
二 Nginx应用举例:
2.1 动静分离
动静分离是把网站中的资源分成两类,静态资源(如图片、静态页、css文件和js文件)和动态的资源(如:调用后台API接口)。
把静态资源缓存操作加快访问速度,动态资源转到后台处理。这就是网站静态化处理的核心思路
server {
listen 8080;
server_name localhost;
location / {
root html; # Nginx默认值
index index.html index.htm;
}
# 静态化配置,所有静态请求都转发给 nginx 处理,存放目录为 my-project
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /usr/local/var/www/my-project; # 静态请求所代理到的根目录
}
# 动态请求匹配到path为'api'的就转发到8002端口处理
location /api/ {
proxy_pass http://localhost:8002; # 充当服务代理
}
}
2.2 适配PC和移动端
一般站点的PC端和移动端不太相同,使用Nginx可以区分用户访问时采用的哪种方式(PC端和移动端),并返回对应的站点
server {
listen 8080;
server_name localhost;
location / {
# 适配移动端/PC端配置
set $type "pc";
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
set $type "mobile";
}
root /usr/local/var/www/my-project/$type; # 根据设备类型选择设定根目录文件夹名(pc/mobile)
index index.html index.htm;
}
}
2.3 反向代理
Nginx最重要的功能是当做反向代理服务器,什么是方向代理,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的在哪里。
一般目标服务器都是内网发布,用Nginx作为中间服务器代理访问,可提高了内部服务器的安全,加快对内部服务器的访问速度及节约有限的IP资源。
server {
listen 8075;
server_name localhost;
location / {
proxy_pass http://localhost:8072/;//代理到http://localhost:8072
}
}
2.4 重定向
server {
listen 8061;
#server_name 39.104.115.151;
server_name localhost;
location / {
rewrite ^/(.*) http://www.baidu.com;#重定向到百度
}
}
2.5 负载均衡
什么是负载均衡 在互联网早期,业务流量相对比较小,而且业务逻辑比较简单,单台服务器便可以满足基本的需求;但是随着互联网的发展,业务流量越来越大、业务逻辑也越来越复杂,单台机器的性能问题以及单点问题凸显了出来,因此需要多台机器来进行性能的水平扩展以及避免单点故障
-
2.51轮询
upstream backserver {
server localhost:8067;
server localhost:8068;
}
server {
listen 8062;
#server_name 39.104.115.151;
server_name localhost;
location / {
proxy_pass http://backserver ;
}
}
-
2.52 负载均衡之权重
upstream backserver {
server localhost:8067 weight=3;
server localhost:8068 weight=1;
}
server {
listen 8062;
server_name localhost;
location / {
proxy_pass http://backserver ;
}
}
-
2.53 负载均衡之ip_hash
上面的 2 种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了 session 保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了 session 中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用 iphash 了,iphash 的每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream backserver {
ip_hash;
server localhost:8067;
server localhost:8068;
}
server {
listen 8062;
#server_name 39.104.115.151;
server_name localhost;
location / {
proxy_pass http://backserver ;
}
}
-
2.54 fair(需要在nginx安装第三方组件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
fair;
server localhost:8067;
server localhost:8068;
}
server {
listen 8062;
#server_name 39.104.115.151;
server_name localhost;
location / {
proxy_pass http://backserver ;
}
}
参考文章
(1) https://juejin.im/post/5e9ab2e851882573a67f62a0
(2)http://www.raye.wang/2017/02/24/quan-mian-liao-jie-nginxdao-di-neng-zuo-shi-yao/