WangScaler: 一个用心创作的作者。声明:才疏学浅,如有错误,恳请指正。
nginx在项目开发中担任着重要的角色,比如我们常说的负载均衡、动静分离、反向代理,都可以通过nginx来实现,那么今天我们就一起来看看nginx如何使用。
安装
安装方式有很多,我们选择最简单的yum来安装。
yum install nginx
启动
systemctl restart nginx.service
可以通过以下命令检查服务的状态
systemctl status nginx.service
也可以直接在浏览器访问http://IP来检查nginx的页面。默认的是80端口
如果你需要开机自启,可以使用命令
systemctl enable nginx.service
动静分离
我们开发过程中静态页面,是无需经过后端处理的,如果通过后端获取,白白浪费资源,可以通过nginx配置,直接通过nginx返回静态页面。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html/wangscaler;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /index.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
通过yum安装的静态页面地址是/usr/share/nginx/html
,你可以将你的静态页面放在这个文件夹下,比如我的项目就放在这个文件夹下的wangscaler文件夹下。通过在nginx的配置文件/etc/nginx/nginx.conf
配置root选项即可。
负载均衡
像tornado是单线程的框架,主要通过epoll来处理任务,为了增强应用处理高并发的能力,给tornado项目进行负载均衡是非常不错的选择,你也可以在tornado官方文档里看到,tornado官方也是推荐使用nginx来做负载均衡的。
比如我们的项目部署在三台机器上。且后台接口的前缀是/wangscaler/v1
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html/wangscaler;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /wangscaler/v1{
proxy_pass http://WangScalerApi;
}
upstream WangScalerApi {
least_conn;
server 192.168.1.100:8888 weight=3;
server 192.168.1.200:8888 weight=3;
server 192.168.1.300:8888 weight=3;
}
error_page 404 /index.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
可能你的服务器的配置不一样,像低配的服务器可以少分点权重,通过weight降低权限即可。当然nginx的权重策略有很多,感兴趣或者有其他需要的可以去查查资料。
tcp的负载均衡
我们的tcp、udp服务或者emqx服务等等,也可以使用nginx做负载均衡
stream {
upstream WangScalerServer {
#hash $remote_addr consistent;
server 192.168.1.100:3333 max_fails=2 fail_timeout=30s weight=8;
server 192.168.1.200:3333 max_fails=2 fail_timeout=30s weight=10;
server 192.168.1.300:3333 max_fails=2 fail_timeout=30s weight=7;
}
server {
listen 9999;
proxy_pass WangScalerServer;
}
}
打开hash $remote_addr consistent;
,会使你相同IP的客户端连向同一台服务器。
加密
当我们部署我们的静态网站(博客),但是我们不希望别人直接访问,也可以加上密码。
mkdir /usr/local/wangscaler
yum install -y httpd-tools
htpasswd -bc /usr/local/wangscaler/htpasswd.users wangscaler password
通过htpasswd.users文件来配置密码。在nginx的配置文件配置。
location /wangscaler{
auth_basic "wangscaler";
auth_basic_user_file /usr/local/wangscaler/htpasswd.users;
proxy_pass http://WangScalerApi;
}
原始IP透传
经过nginx负载之后,无论是我们的web服务还是tcp服务,得到的ip地址都是nginx所在机器的ip地址,但是我们的业务中往往需要原始的IP地址,比如日志的记载。那么原始IP怎么透传呢?
Web服务
location /wangscaler{
proxy_pass http://WangScalerApi;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
给请求添加hear字段为X-Real-IP。
TCP服务
server {
listen 9999;
proxy_protocol on;
proxy_pass WangScalerServer;
}
只需要增加proxy_protocol on;
,即可,当客户端连接的时候,nginx会向服务器发送携带原始IP的数据包。
总结
以上是最基本的操作,nginx还有很多强大的功能,感兴趣的话就去研究研究,今天就到这里,对了
events {
worker_connections 1024;
use epoll;
}
这里的worker_connections
记得根据你的业务,适当调大哦。
来都来了,点个赞再走呗!关注WangScaler,祝你升职、加薪、不提桶!