Nginx 安装和基本操作
安装
yum install nginx
启动
servic nginx start
停止
service nginx stop
重载
servic nginx reload
安装
安装前可以查询是否已经安装过
sudo yum search nginx
如果需要安装,为了更快安装, 需要将镜像的源添加进来
1 2 3 |
$ sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm $ yum install nginx |
就很快安装好了, 大小2.5m
和重启restart不同(杀死进程并重新启动), reload 在运行状态下就可以进行服务的重载
运维常用!!! 不会杀死进程就可以更新配置
查看服务状态
查看Nginx的欢迎页面
配置
查看配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[delucia@www modules]$ vim /etc/nginx/nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } |
这个主要配置文件
配置了日志存放的位置等信息
也会加载 /etc/nginx/conf.d/*.conf
这些配置文件, 这里默认只有一个default.conf
的文件存在 如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[delucia@www conf.d]$ vim default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } |
可以尝试修改index.html让引导页变得不一样
拓展
虚拟主机
复制一份detault.conf 重命名为niit.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo cp default.conf niit.conf $ sudo vim niit.conf server { listen 80; server_name www.niit.test; location { root /data/www/ ; index index.html index.htm; } } |
保存, 访问页面:
页面并没有发生变化, 这是因为修改配置后需要重启或者重载服务
1 |
$ sudo service nginx reload |
然后访问 首页就是/data/www/index.html
的内容了
按F12打开调试信息:
这个服务器版本明文显示出来是有安全风险的
如果黑客知道某个版本的容器有漏洞那么就会增加他攻击你的概率
可以通过配置屏蔽掉
多端口
多端口也很容易配置
保存并重载nginx服务
多域名
配置多域名也很容易
修改hosts文件
然后重载nginx服务就可以这样访问了
伪静态
NGINX 的伪静态 也就是 重写功夫是默认开启的, 修改 /etc/nginx/conf.d/niit.conf
这样只要路径符合*.htmp
都会指向index.html
的
日志格式
nginx 的自定义 日志格式
main
是日志格式的命名空间, 也就是可以允许定义多个格式
当前格式下的日志信息如下:
1 |
sudo tail -f /var/log/nginx/access.log |
tailf
、tail-f
、tail-F
三者区别
taill -f
等同于--follow=descriptor
,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tall -F
等同于-follow=name--retry
,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
tailf
等同于tail -f -n10
(貌似tail-f域-F默认也是打印最后10行,然后追踪文件),与tail-f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电
自定义日志格式也很简单, 修改nginx.conf文件 增加niit的命令空间
重载服务后 , 查看日志格式变成
也可以针对不同虚拟主机设置 不同的日志保存位置
浏览网页后日志变成
还有error_log 主要是记录报错信息的
也是一样可以配置的
反向代理和负载均衡
反向代理
中间的机器就是反向代理, 将local机器的请求代理了,实际请求是发向右边三台服务器其中之一
比如要将我的本地虚拟机的nginx容器反向代理到我的博客地址
可以通过这个网站查询我的博客域名的实际ip, 然后配置反向代理如下
这样访问域名www.niit.test时就会被nginx重写请求并指向到我的博客网站了
F12查看网路
负载均衡
当一台服务器无法承受请求量, 可以配置多台服务器
负载均衡就是在配置中配置多个主机, 假设我的博客已经部署到了2个不同主机上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
upstream niit_hosts { server 119.23.14.201:80 weight=5; server 119.23.14.301:80 weight-1; } server { listen 80; listen 8080; server_name www.niit.test www.niit2.test; root /data/www; index index.html index.htm; access_log /var/log/nginx/access_niit.log niit; location / { proxy_set_header Host www.delucia.cn; proxy_pass http://niit_hosts; } } |
其中weight表示使用权重随机算法作为负载均衡的策略, weight的值代表权重
这样会有5/6的请求被随机转发到第一个server
其他1/6的请求会被随机转发到第二个server
除了权重随机算法之外, 还有线性轮询(默认), 公平(fair)等负载均衡算法可以配置.
调试
1 2 3 4 5 6 |
server { ... add_header Content-Type "text/plain;charset=utf-8"; return 200 "$http_host"; ... } |
注意其中新加入的 add_header ... utf-8
和return 200 ...
目的是让满足请求条件的页面输出一个$http_host
即请求域名
而utf-8的作用是使输出能够正确显示在页面上
如果不添加这个header则会默认显示下载保存成文件(不推荐)
Views: 39