nginx常用配置
NGINX
一nginx能做什么
- 反向代理
- 负载均衡
- http服务器(动静分离)
- 正向代理
以上是nginx可以独立完成运行的
1.反向代理
什么是反向代理
反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。 (百度百科)
server
{
lister 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_Header Host $host:$server_port;
}
}
访问localhost 相当于访问localhost:8080
2.负载均衡
负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分到多个服务器进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡。
- RP(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream test {
server www.liufukui.cn:8080;
server www.liufukui.cn:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_Header Host $host:$server_port;
}
}
我自己配置两台服务器,只是端口不一致,而8081的服务器是不存在的,也就是说访问不到,但是我们访问http://localhost 的时候,也不会有问题,会默认跳转到http://localhost:8080 具体是因为Nginx会自动判断服务器的状态,如果服务器处于不能访问(服务器挂了),就不会跳转到这台服务器,所以也避免了一台服务器挂了影响使用的情况,由于Nginx默认是RR策略,所以我们不需要其他更多的设置。自动剔除
- 权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如
upstream test {
server www.liufukui.cn:8080 weight=100;
server www.liufukui.cn:8081 weight=50;
}
那么100次大约有30次访问到8081, 70次到8080.
- ip_hash(不常用)
但是如果开发用到session共享的方式 ip_hash 也可以解决
上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream test {
ip_hash;
server www.liufukui.cn:8080 weight=100;
server www.liufukui.cn:8081 weight=50;
}
3.HTTP服务器(web端)
Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现,首先看看Nginx做静态资源服务器
server {
listen 80;
server_name www.liufukui.cn:
location / {
root /var/www/html;
index index.html;
}
}
如果是静态网站界面即可这样部署配置
下面介绍动静分离配置
静态是一些图片 js,css之类 动态一班是tomcat通过处理
upstream test {
server www.liufukui.cn:8080 weight=100;
server www.liufukui.cn:8081 weight=50;
}
server {
listen 80;
server_name www.liufukui.cn;
location / {
root /var/ww/html;
index index.html;
}
#所有请求都有nginx处理 ,目录为html
location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root /var/www/html;
}
#动态交给tomcat处理
location ~. (jsp|do)$ {
porxy_pass http://test.fukui;
}
这样我们就可以吧html文件以及图片和css以及js放到html目录下,而tomcat只负责处理jsp和请求,例如当我们后缀为gif的时候,Nginx默认会从html获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式。
- 正向代理
意思是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理,
5.nginx https配置 以及php配置 还有刷新防止出现文件不存在则转发try_files $uri $uri/ /index.html;这个配置 根据开发要求
server {
listen 443 ssl http2 reuseport;
server_name yaoxueapi.baitongshiji.com;
client_max_body_size 100m;
add_header X-Content-Type-Options nosniff;
ssl on;
#公钥私钥
ssl_certificate /etc/nginx/conf.d/cert/1585592_yaoxueserver.baitongshiji.com.pem;
ssl_certificate_key /etc/nginx/conf.d/cert/1585592_yaoxueserver.baitongshiji.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'CHACHA20:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
location / {
root /opt/yaoxue/yaoxueserver/yaoxueserver; #指定网站根目录。
index index.htm index.html index.php;
if (!-e $request_filename) {
#rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
location / {
try_files $uri $uri/ /index.html;
}
}
location ~ \.php$ {
add_header Cache-Control "no-cache, no-store, max-age=0, must-revalidate";
add_header Pragma no-cache;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /opt/yaoxue/yaoxueserver/yaoxueserver$fastcgi_script_name;
}
}