Nginx知识整理

概述&安装

Nginx是一个轻量级的高性能Web服务器,提供HTTP代理、反向代理、负载均衡、缓存等功能,它是基于事件的异步IO的迸发模型。
安装

1
2
3
4
5
6
7
8
9
# ubuntu安装
$ sudo apt-get install nginx
# 编译安装
$ ./configue \
$ --user=nginx
$ --prefix=/etc/nginx
$ ... # 根据自己的需求配置
$ make
$ sudo make install

基本命令

1
2
3
4
5
6
7
8
9
# 启动,重启,停止
$ sudo service nginx start # or restart, stop
$ sudo /etc/init.d/nginx start # or restart, stop
# 让配置生效
$ sudo nginx -s reload
# 查看nginx进程情况
$ ps aux|grep nginx
# 查看nginx配置文件路径
$ sudo nginx -t

默认配置文件

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# vim /etc/nginx/nginx.conf

user www-data [group]; #运行用户, 用户组
worker_processes auto; #启动进程,通常设置成和cpu的数量相等
error_log /var/log/nginx/error.log | stderr; #全局错误日志, 输出到标准错误输出
pid /run/nginx.pid; #nginx作为守护进程,需要在PID文件中保存当前运行程序的主进程号
include /etc/nginx/modules-enabled/*.conf; #指定配置或引入第三方配置

events {
use epoll; #使用的模型,其他的有select, poll, kqueue等,epoll是多路复用IO的一种方式,能大大提高nginx性能
worker_connections 768; #每个worker process可以同时开启的最大连接数
# multi_accept on; #是否允许每个work process同时接收多个网络连接
keepalive_timeout 60; #超时时间
keepalive_requests number; #单连接请求数上限
}

http {

##
# Basic Settings
##
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#日记格式设置,$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址,$remote_user:用来记录客户端用户名称,$time_local: 用来记录访问时间与时区,$request: 用来记录请求的url与http协议,$status:用来记录请求状态;成功是200,$body_bytes_sent :记录发送给客户端文件主体内容大小,$http_referer:用来记录从那个页面链接访问过来的,$http_user_agent:记录客户浏览器的相关信息;
#通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

access_log /var/log/nginx/access.log main; #指定日记文件路径
error_log /var/log/nginx/error.log ;

sendfile on; #用于使用sendfile()传输文件,如果是下载类的应用,可设置off
tcp_nopush on; #允许使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用
tcp_nodelay on;
keepalive_timeout 65; #连接超时时间
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types; #设定mine类型
default_type application/octet-stream;

client_header_buffer_size 4k; #客户端请求头部的缓冲区大小,根据系统的分页大小来设定
large_client_header_buffers 8 128k; #最大缓冲区大小

client_max_body_size 300m; #设定通过nginx上传文件的大小

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Logging Settings
##

##
# Gzip Settings
##

gzip on; #开启gzip压缩

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf; #包含其他配置文件
include /etc/nginx/sites-enabled/*;
}

普通配置

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# vim /etc/nginx/conf.d/myweb.conf

server {
listen 8088;
server_name 123.456.789.101;
access_log /codesheep/webserver/server1/log/access.log;
error_page 404 /404.html;

# location 表示url路径
location / {
proxy_pass http://192.168.1.100:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #后端web服务器可以通过X-Forwarded-For获取用户真实IP
}

location /server1/location1 {
root /codesheep/webserver;
index index.server2-location1.htm;
}

location /server1/location2 {
root /codesheep/webserver;
index index.server2-location2.htm;
}

#部署静态文件
location /share/ {
alias /home/web/html/;
index share.html;
}

#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}

#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}
}

# 配置uwsgi
server {
listen 80; 如有多个web应用,都是80端口监听
server_name resume.itswcg.com; #地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8386; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /www/wwwroot/www.itswcg.site/venv; #指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /www/wwwroot/www.itswcg.site; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT main:app; # 指定启动程序
}
location /static/ {
root /www/wwwroot/www.itswcg.site/static;
expires 24h;
access_log off;
}
}

负载均衡

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
49
50
51
52
53
54
55
56
57
# vim /etc/nginx/conf.d/myweb.conf

# nginx的upstream支持轮询(默认)、weight、is_hash、fair
upstream myweb {
is_hash; #根据访问ip的hash结果分配
server 127.0.0.1:8027 weight=5;
server 127.0.0.1:8028 down;
server 127.0.0.1:8029 backup; #前面的所有机器忙的时候,请求backup机器
fair; #根据服务器的相应时间来分配
# hash $request_uri; 根据url的hash来分配请求,如果采用,不能加weight等参数
# hash_method crc32; 指定hash算法
}

upstream todo {
server 127.0.0.1:8031;
}

server {
listen 80 default_server;
listen [::]:80 default_server ; #ipv6only=on

root /usr/share/nginx/html;
index index.html index.htm;

server_name myweb.com 123.456.789.101;

location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://myweb;

# 其他设置
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}

location ^~ /todo/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://todo;

location ^~ /todo/static {
root /todo/static;
expires 24h;
access_log off;
}
}
}

参考

https://nginx.rails365.net/
https://www.v2ex.com/t/465840
https://blog.csdn.net/tjcyjd/article/details/50695922
https://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html

----------本文完,感谢您的阅读----------