Nginx 的安装与配置
Posted JMCui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 的安装与配置相关的知识,希望对你有一定的参考价值。
一、下载
Linux:CentOS 7.3 64位
nginx:nginx-1.13.1
安装目录:/usr/local/
wget http://nginx.org/download/nginx-1.13.1.tar.gz
二、安装
1、安装Nginx依赖
(1) gcc、gcc-c++
yum install gcc yum install gcc-c++
(2) pcre 、zilb
yum -y install pcre* yum -y install zlib*
(3) openssl (若需要支持 https 协议)
yum -y install openssl yum -y install openssl-devel
2、安装Nginx
(1) 解压安装包
tar -z -xv -f nginx-1.13.1.tar.gz
(2) 编译
cd nginx-1.13.1 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre
tips:
--prefix:设置安装路径
--with-http_stub_status_module:支持nginx状态查询
--with-http_ssl_module:支持https
--with-pcre:为了支持rewrite重写功能,必须制定pcre
(3) 安装
make make install
(4) 启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
(5) 效果
访问 http://域名/
三、配置
Nginx 的配置内容都写在 /usr/local/nginx/conf/nginx.conf 中,先来看看这个文件一些配置项的含义:
#user nobody; #开启的线程数,一般跟逻辑CPU核数一致 worker_processes 1; #定位全局错误日志文件,级别以notice显示,还有debug,info,warn,error,crit模式,debug输出最多,crir输出最少,根据实际环境而定 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #指定进程id的存储文件位置 #pid logs/nginx.pid; events { #定义每个进程的最大连接数,受系统进程的最大打开文件数量限制。 worker_connections 1024; } http { include 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 logs/access.log main; sendfile on; #开启防止网络阻塞 #tcp_nopush on; #开启防止网络阻塞 #tcp_nodelay on; #keepalive_timeout 0; #设置客户端连接保存活动的超时时间 keepalive_timeout 65; #设置允许客户端请求的最大的单个文件字节数 client_max_body_size 200m; #指定来自客户端请求头的headebuffer大小 #client_header_buffer_size 32k; #指定连接请求试图写入缓存文件的目录路径 #client_body_temp_path /dev/shm/client_body_temp; #指定客户端请求中较大的消息头的缓存最大数量和大小,目前设置为4个32KB #large client_header_buffers 4 32k; #gzip on; #配置负载均衡 upstream tomcatServer { server 192.168.0.1:8680 weight=10; server 192.168.0.2:8680 weight=10; } server { #监听端口,其中 http 是80,https 是 443 listen 80; #主机域名 server_name localhost; #设置访问的语言编码 #charset koi8-r; #设置虚拟主机访问日志的存放路径及日志的格式为main #access_log logs/host.access.log main; #监听所有的 / 访问路径,并将它转化相应服务器 location / { proxy_pass http://tomcatServer/; } #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 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; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # server { #监听https请求 listen 443 ssl; #主机域名 server_name api.gogo.cn; #公钥,他会被发送到连接服务器的每个客户端 ssl_certificate /usr/local/cert/lxcx.pem; #私钥,是用来解密的 ssl_certificate_key /usr/local/cert/lxcx.key; #缓存在所有工作进程之间共享,1MB可以存储4000个会话 ssl_session_cache shared:SSL:1m; #会话超时时间 ssl_session_timeout 30m; #Nginx 只允许使用 TLS 协议 #指令用于启动特定的加密协议 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #选择加密套件 ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP; #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件 ssl_prefer_server_ciphers on; proxy_connect_timeout 500; proxy_send_timeout 500; proxy_read_timeout 500; client_max_body_size 200m; location / { # root html; # index index.html index.htm; proxy_pass http://172.27.0.11:8680/; }
# 配置 wss 访问
location /socket { proxy_pass http://127.0.0.1:/9999; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
}
server { listen 443 ssl; server_name admin.gogo.cn; ssl_certificate /usr/local/cert/lxcx.pem; ssl_certificate_key /usr/local/cert/lxcx.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { #root html; # index index.html index.htm; proxy_pass http://172.27.0.11:8380/; proxy_connect_timeout 500; proxy_send_timeout 500; proxy_read_timeout 500; client_max_body_size 200m; } } }
1、配置负载均衡
如上,在文件中配置以下内容,这里用的是 指定轮询几率 的权重分配方式,指定 两台服务器的访问几率。这里配置的 1:1 的访问几率,可以根据服务器的硬件条件配置相应的比例。这种配置有个缺陷就是访问请求 随机的在两台服务器间跳转,还需要解决不同服务器间session共享问题。
upstream tomcatServer { server 192.168.0.1:8680 weight=10; server 192.168.0.2:8680 weight=10; }
除了这种方式外,还有 ip_hash 方式。每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可解决session的问题:
upstream tomcatServer { ip_hash; server 192.168.0.1:8680; server 192.168.0.2:8680; }
还有一种,按后端服务器的响应时间来分配请求,响应时间短的优先分配:
upstream tomcatServer { server 192.168.0.1:8680; server 192.168.0.2:8680; fair; }
接下来,我们就要把访问请求 映射到负载均衡上:
location /{ proxy_pass http://tomcatServer/; }
2、重启服务
(1) 验证配置文件是否正确
进入nginx安装目录sbin下,输入命令./nginx -t
(2) 重启服务
进入nginx可执行目录sbin下,输入命令./nginx -s reload 即可
四、Docker 安装 Nginx
以上是关于Nginx 的安装与配置的主要内容,如果未能解决你的问题,请参考以下文章
nginx.conf 忽略了 nginx-ingress 配置映射片段
Nginx——Nginx启动报错Job for nginx.service failed because the control process exited with error code(代码片段