CentOS Nginx的安装与部署

  • A+
所属分类:Nginx

CentOS Nginx的安装与部署

1.安装工具包 wget、vim和gcc

  1. yum install -y wget    
  2. yum install -y vim-enhanced    
  3. yum install -y make cmake gcc gcc-c++  

2.下载nginx安装包

  1. wget http://nginx.org/download/nginx-1.6.2.tar.gz  

3.安装依赖包

  1. yum install -y pcre pcre-devel  
  2. yum install -y zlib zlib-devel  
  3. yum install -y openssl openssl-devel  

4.解压nginx-1.6.2.tar.gz到/usr/local/目录下

  1. tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/  

5.进行configure配置

  1. 进入nginx-1.6.2目录然后在执行./configure命令  
  1. ./configure --prefix=/usr/local/nginx  

6.编译安装

  1. make && make install  

7.启动Nginx,启动完之后检查nginx是否已经正常启动

  1. /usr/local/nginx/sbin/nginx  
  2. ps -ef | grep nginx  

看到如下信息说明正常启动

  1. root      4683     1  0 10:31 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx  
  2. nobody    4684  4683  0 10:31 ?        00:00:00 nginx: worker process  
  3. root      4704  1953  0 10:31 pts/0    00:00:00 grep --color=auto nginx  

8.配置防火墙,nginx默认的端口是80

  1. firewall-cmd --zone=public --add-port=80/tcp --permanent  
  2. firewall-cmd --reload  

9.测试Nginx

  1. 通过浏览器访问nginx欢迎页,在地址栏输入:http://IP/(80端口可以不用输)或http://IP:80/  

10.学习Nginx配置

  1. 在nginx目录下进入conf目录,该目录下有个nginx.conf文件,这是nginx最重要的配置文件  
  1. vim /usr/local/nginx/conf/nginx.conf  

nginx.conf文件的全部内容如下(有注释版):

  1. #user  nobody;    
  2.   
  3. #开启进程数 <=CPU数     
  4. worker_processes  1;    
  5.   
  6. #错误日志保存位置    
  7. #error_log  logs/error.log;    
  8. #error_log  logs/error.log  notice;    
  9. #error_log  logs/error.log  info;    
  10.   
  11. #进程号保存文件    
  12. #pid        logs/nginx.pid;    
  13.   
  14. #每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024    
  15. events {    
  16.     worker_connections  1024;    
  17. }    
  18.   
  19.   
  20. http {    
  21.     #文件扩展名与文件类型映射表    
  22.     include       mime.types;    
  23.     #默认文件类型    
  24.     default_type  application/octet-stream;    
  25.   
  26.     #日志文件输出格式 这个位置相于全局设置    
  27.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    
  28.     #                  '$status $body_bytes_sent "$http_referer" '    
  29.     #                  '"$http_user_agent" "$http_x_forwarded_for"';    
  30.   
  31.     #请求日志保存位置    
  32.     #access_log  logs/access.log  main;    
  33.   
  34.     #打开发送文件    
  35.     sendfile        on;    
  36.     #tcp_nopush     on;    
  37.   
  38.     #keepalive_timeout  0;    
  39.     #连接超时时间    
  40.     keepalive_timeout  65;    
  41.   
  42.     #打开gzip压缩    
  43.     #gzip  on;    
  44.   
  45.     server {    
  46.         #监听端口,默认是80端口    
  47.         listen       80;    
  48.         #监听域名    
  49.         server_name  localhost;    
  50.   
  51.         #charset koi8-r;    
  52.   
  53.         #nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式)    
  54.         #access_log  logs/host.access.log  main;    
  55.   
  56.         #如果没有location更明确的匹配访问路径的话,访问请求都会被该location处理。    
  57.         location / {    
  58.             #root指定nginx的根目录为/usr/local/nginx/html    
  59.             root   html;    
  60.             #默认访问文件,欢迎页先去html目录下找index.html,如果找不到再去找index.htm    
  61.             index  index.html index.htm;    
  62.         }    
  63.   
  64.         #error_page  404              /404.html;    
  65.         # redirect server error pages to the static page /50x.html    
  66.         #    
  67.   
  68.         #错误页面及其返回地址,错误码为500502503504都会返回50.html错误页面。    
  69.         error_page   500 502 503 504  /50x.html;    
  70.         #location后面是"="的话,说明是精确匹配    
  71.         location = /50x.html {    
  72.             root   html;    
  73.         }    
  74.   
  75.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80    
  76.         #    
  77.         #location ~ \.php$ {    
  78.         #    proxy_pass   http://127.0.0.1;    
  79.         #}    
  80.   
  81.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000    
  82.         #    
  83.         #location ~ \.php$ {    
  84.         #    root           html;    
  85.         #    fastcgi_pass   127.0.0.1:9000;    
  86.         #    fastcgi_index  index.php;    
  87.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;    
  88.         #    include        fastcgi_params;    
  89.         #}    
  90.   
  91.         # deny access to .htaccess files, if Apache's document root    
  92.         # concurs with nginx's one    
  93.         #    
  94.         #location ~ /\.ht {    
  95.         #    deny  all;    
  96.         #}    
  97.     }    
  98.   
  99.   
  100.     # another virtual host using mix of IP-, name-, and port-based configuration    
  101.     #    
  102.     #server {    
  103.     #    listen       8000;    
  104.     #    listen       somename:8080;    
  105.     #    server_name  somename  alias  another.alias;    
  106.   
  107.     #    location / {    
  108.     #        root   html;    
  109.     #        index  index.html index.htm;    
  110.     #    }    
  111.     #}    
  112.   
  113.   
  114.     # HTTPS server    
  115.     #    
  116.     #server {    
  117.     #    listen       443 ssl;    
  118.     #    server_name  localhost;    
  119.   
  120.     #    ssl_certificate      cert.pem;    
  121.     #    ssl_certificate_key  cert.key;    
  122.   
  123.     #    ssl_session_cache    shared:SSL:1m;    
  124.     #    ssl_session_timeout  5m;    
  125.   
  126.     #    ssl_ciphers  HIGH:!aNULL:!MD5;    
  127.     #    ssl_prefer_server_ciphers  on;    
  128.   
  129.     #    location / {    
  130.     #        root   html;    
  131.     #        index  index.html index.htm;    
  132.     #    }    
  133.     #}    
  134.   
  135. }    

配置server

  1. 配置文件里可以添加多个server,server监听的端口不同,可以根据需要让nginx代理多个端口,当访问某个端口的时候,指定去做某些事情。我这里添加了一个server,这个server监听的端口为1234,server_name我指定为了test.com,也就是域名为test.com,当访问1234端口时会自动导航到/usr/local/nginx/tester/tester111.html页面,如下所示。  
  1. server {    
  2.      listen 1234;    
  3.      server_name test.com;    
  4.      location / {    
  5.          #正则表达式匹配uri方式:在/usr/local/nginx/tester下 建立一个tester111.html 然后使用正则匹配    
  6.          root tester;    
  7.          index tester111.html;    
  8.      }    
  9.  }   

Nginx反向代理的配置

  1. 反向代理的配置可以十分简单,直接在server{}中加入:  
  1. location / { proxy_pass http://代理地址:端口; }  
  1. 以上就是一个反向代理配置,但是这还不够,并且在接下来的时间里就会发现这远远不够。  
  1. 所谓反向代理,对真实服务器来说无感知,也就是说它并不知道有Nginx这一个的存在。因为对服务端来说,它一直只被一个永户访问,就是反向代理服务器Nginx,而且一直是使用一个URL访问(http://代理地址:端口)。所幸的是,这些状况都是由上方的那简单的配置而导致的,通过添加一些配置信息,就可以解决这个问题:  
  1. location /  
  2. {  
  3. proxy_pass http://代理地址:端口;  
  4. #传递了客户端(相对于Nginx)的URL地址,使得服务端得知访问它所用的URL是外部客户端所访问的真实URL。  
  5. proxy_set_header Host $http_host;  
  6. #获得客户端的真实IP,而不是Nginx的127.0.0.1。  
  7. proxy_set_header X-Real-IP $remote_addr;  
  8.  #使服务端能正确识别客户端所用的是HTTP协议还是HTTPS协议。  
  9. proxy_set_header X-Forwarded-Proto $scheme;  
  10. }  

WebSocket代理

  1. 现在还有一个棘手的问题,很多Web应用都使用了WebSocket技术,以实现ajax难以实现的一些功能。但在前文中的配置下,Nginx并不会去代理WebSocket请求,Websocket协议是这样的:  
  1. ws://服务器地址/   
  2. wss://服务器地址/  

WebSocket代理解决方案

  1. 在前文的配置中再加入以下内容:  
  2. proxy_set_header Upgrade $http_upgrade;  
  3. proxy_set_header Connection $connection_upgrade;  

最终的反向代理配置如下:

  1. location /  
  2. {  
  3. proxy_pass http://代理地址:端口;  
  4. #传递了客户端(相对于Nginx)的URL地址,使得服务端得知访问它所用的URL是外部客户端所访问的真实URL。  
  5. proxy_set_header Host $http_host;  
  6. #获得客户端的真实IP,而不是Nginx的127.0.0.1。  
  7. proxy_set_header X-Real-IP $remote_addr;  
  8.  #使服务端能正确识别客户端所用的是HTTP协议还是HTTPS协议。  
  9. proxy_set_header X-Forwarded-Proto $scheme;  
  10. #WebSocket代理  
  11. proxy_set_header Upgrade $http_upgrade;  
  12. proxy_set_header Connection $connection_upgrade;  
  13. }  

如果要关闭nginx,我们可以使用如下命令:

  1. /usr/local/nginx/sbin/nginx -s stop  

如果想要重新载入配置文件,则使用如下命令:

  1. /usr/local/nginx/sbin/nginx -s reload  

参考文章:

  1. https://www.orgleaf.com/2612.html  
  2. https://blog.csdn.net/yougoule/article/details/78186138  
  3. http://www.runoob.com/linux/nginx-install-setup.html  
  4. http://nginx.org/en/download.html  
钰玺

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: