Linux——實現網站釋出伺服器
1、DNS工作原理
1、 遞迴式
2、 迭代式
網頁釋出伺服器
1.檢視系統的服務程式的狀態:
service name status
啟動服務:
service name start
關閉服務:
service name stop
2、Linux上html預設存放路徑:
/var/www/html
http請求報頭:
HTTP應答報文段:
網站釋出伺服器程式碼 httpd.c:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/stat.h>
void send_404(int c)
{
char sendbuff[1024] = {0};
strcpy(sendbuff, "HTTP/1.1 404 Not Found\r\n");
strcat(sendbuff, "Server: myhttpd/1.0\r\n");
strcat(sendbuff, "Content-Length: 14\r\n");
strcat(sendbuff, "Content-Type: text/html;charset=gbk\r\n");
strcat(sendbuff, "\r\n");
strcat(sendbuff, "Page Not Found");
send(c, sendbuff, strlen(sendbuff), 0);
}
void senderr(int c)
{
send_404(c);
}
void send_success(int c, int fd)
{
struct stat st;
fstat(fd, &st);
char sendbuff[1024] = {0};
strcpy(sendbuff, "HTTP/1.1 200 OK\r\n");
strcat(sendbuff, "Server: myhttpd/1.0\r\n");
strcat(sendbuff, "Content-Length: ");
sprintf(sendbuff+strlen(sendbuff), "%d", st.st_size);
strcat(sendbuff, "\r\n");
strcat(sendbuff, "Content-Type: text/html;charset=UTF-8\r\n");
strcat(sendbuff, "\r\n");
send(c, sendbuff, strlen(sendbuff), 0);
//fa song wen jian nei rong
while(1)
{
char buff[10] = {0};
int n = read(fd, buff, 9);
if(n <= 0)
{
break;
}
send(c, buff, n, 0);
}
close(fd);
}
void main()
{
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
assert(sockfd != -1);
struct sockaddr_in ser, cli;
memset(&ser, 0, sizeof(ser));
ser.sin_family = AF_INET;
ser.sin_port = htons(80);
ser.sin_addr.s_addr = inet_addr("192.168.1.120");
int res = bind(sockfd, (struct sockaddr*)&ser, sizeof(ser));
assert(res != -1);
listen(sockfd, 5);
while(1)
{
int len = sizeof(cli);
int c = accept(sockfd, (struct sockaddr*)&cli, &len);
assert(c != -1);
printf("one client link\n");
while(1)
{
char buff[1024] = {0};
int n = recv(c, buff, 1023, 0);
if(n <= 0)
{
break;
}
//printf("%s\n", buff);
char *p = strtok(buff, " ");
if(p == NULL)
{
senderr(c);
continue;
}
p = strtok(NULL, " ");
if(p == NULL)
{
senderr(c);
continue;
}
char path[128] = "/var/www/html";
strcat(path, p);
int fd = open(path, O_RDONLY);
if(fd == -1)
{
send_404(c);
continue;
}
//cheng gong, fa song ying da bao wen duan he wen jian nei rong
send_success(c, fd);
}
close(c);
printf("one client unlink\n");
}
}
相關推薦
Linux——實現網站釋出伺服器
1、DNS工作原理1、 遞迴式2、 迭代式 網頁釋出伺服器 1.檢視系統的服務程式的狀態:service name status啟動服務:service name start關閉服務:service name stop 2、Linux上html預設存放路徑:/var
Linux實現兩個伺服器上兩個資料庫的表同步
最近遇到一個問題,需要將一個伺服器上的oracle資料庫中的表格的資料,匯入到另外一個伺服器上的mysql資料庫中。由於兩個伺服器上使用的是Linux系統,並且對此係統不是很熟悉,解決起來很是艱難,下面將我想到的其中一個辦法寫下來,跟大家分享一下: 第一步:在oracle伺服器上,建立一個目錄。
基於linux實現keepalived高可用的集群網站架構
基於linux實現keepalived高可用的集群網站架構模擬場景:隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,目前業務已經通過集群LVS架構可做到隨時拓展,後端節點已經通過集群技術(ldirectord)保障了可用性,但對於前端負載均衡器來說,是個比較大的
Linux 安裝FastDFS圖片伺服器以及配合nginx實現圖片檢視
各位同學,今天我們來學習一下如何安裝FastDFS圖片伺服器,首先我們先來介紹一下什麼是圖片伺服器。 1.什麼是FastDFS FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等
linux centos7 下Nginx伺服器實現URL重寫去掉index.php方法,跟Apache還是不一樣的。
想要的URL :http://localhost/Admin/ 而自己的是http://localhost/index.php/Admin/ 方法: 在nginx配置檔案nginx.conf中新增: location / { if ( !e $request_filename )
java實現 連線遠端伺服器 執行Linux命令 並獲取 執行返回的結果
情景:要通過java連線伺服器,並執行指令碼命令 得到 返回的結果 package com.ideal.openapi.util; import com.jcraft.jsch.*; import org.slf4j.Logger; import org.slf4j.LoggerFacto
手摸手帶你部署git伺服器實現自動釋出程式碼
前段趁著活動買了個騰訊雲伺服器,一直沒抽時間去折騰,最近才開始部署了一個自己專屬的git倉庫,實現程式碼自動釋出部署功能。(我也想成為努力向上,積極進取的有志青年啊!)文章的內容基本都是參考自谷歌搜尋,然後按我的思路重新整理一遍,既是為了分享也是為了鞏固知識。 我也是第一次折騰伺服器,前期部署就
Linux 網路程式設計——併發伺服器的三種經典實現模型
伺服器設計技術有很多,按使用的協議來分有 TCP 伺服器和 UDP 伺服器,按處理方式來分有迴圈伺服器和併發伺服器。 迴圈伺服器與併發伺服器模型 在網路程式裡面,一般來說都是許多客戶對應一個伺服器(多對一),為了處理客戶的請求,對服務端的程式就提出了特殊的要求。
用 Linux epoll 實現高效能 HTTP 伺服器
用 Linux epoll 實現高效能 HTTP 伺服器 為了程式碼的整潔性,本文章所介紹功能將使用 C++ 實現。實際使用中可轉為 C 語言使用。 此專案只能在Linux下使用,windows請繞道。 專案概括 本專案是使用 Linux epoll 實現的一個簡單
Mac與Linux 實現nginx的安裝 與 訪問虛擬機器裡的nginx 實現的反向代理網站及檔案目錄
一 現在主要實現的是 nginx 反向代理功能, 首先 , 先在虛擬機器裡的系統裝 nginx Note:我用的是Cent
網站釋出到伺服器後cookie無法登入問題
1.網站在本機測試時登入正常,釋出到伺服器後,在登入頁,輸入賬號密碼,點選登入失效,頁面不跳轉。 本來以為是IE11 edge瀏覽器不支援cookie導致的,但是按照網上各種方法都沒有解決! 最後發現,原來是伺服器時間比正常時間晚了一天導致的,修改伺服器時間日期後,解決登入
linux下構建svn伺服器並實現專案自動部署
在Linux系統中搭建svn服務所需要用到的軟體叫做subversion,可以通過yum來進行安裝. svn服務是為了實現協同工作,即一個團隊公眾開發一個專案而不導致程式碼混亂,不會出現今天我修改的程式碼在不通知同事的情況下又被他修改了.
【伺服器】把個人電腦打造成釋出網站的伺服器
個人電腦打造伺服器步驟: 動態域名解析器有很多嗎,筆者在這裡主要講解“花生殼”動態域名解析器的用法 花生殼下載安裝 (參考資料裡面有下載地址) (安裝完成後的效果圖) 申請註冊花
Linux下簡易web伺服器實現
今天突然對http的web伺服器感興趣了,就研究了一下,發現linux下的web伺服器就是一個socket程式設計的伺服器端,而我們用的ie,chrome等瀏覽器就是客戶端,只不過傳送和接收資料按照http網頁格式,就相當於對資料進行了封裝,相當於加上了檔案頭和檔案
Linux客戶端與伺服器相互實現聊天功能
這個實現方法只能夠單執行緒聊天,recv是阻塞的,你發一句我回一句,必須一來一回,後文會記錄多執行緒實現聊天 客戶端程式碼如下 #include <stdio.h> #include <stdlib.h> #include <string.h
Linux C UDP Socket實現客戶與伺服器簡單通訊
在linux平臺下用c語言udp協議實現客戶與伺服器的簡單通訊與封裝的實現 一、伺服器端 1、新建CreateServer.c和CreateServer.h檔案,伺服器的建立程式碼在此實現,程式中封裝了建立TcpSocket和UdpSocket伺服器的方法,
linux配置Jexus釋出asp.net網站
linux配置Jexus 博文如上,寫得很詳細了,具體操作下來是完成可以成功的。 Ubuntu14.10實測。 我這裡主要分享的是配置釋出網站。 照著預設安裝的樣式的話,Jexus預設安裝在/usr/jexus/ 這個路徑下,ls一下可以看到很多的東西。 我們釋出一個
Linux + C + Epoll實現高併發伺服器(執行緒池 + 資料庫連線池)
一, 背景 先說下我要實現的功能,server端一直在linux平臺下面跑,當客戶端有請求過來的時候server端接受到請求,拿到客戶端的資料,根據拿到的資料做出相應的處理,得到處理的結果直接把結果資料傳送給客戶端。這樣一個連線的請求結束,我的不
linux下dns主從伺服器實現
案例環境: 主域名伺服器:ns1.zdj.com,172.17.0.142 從域名伺服器:ns2.zdj.com,172.17.0.37 兩臺伺服器均能夠提供 zdj.com 區域的域名解析主域名伺服
linux下rsync+inotify實現兩臺伺服器檔案實時同步
假設兩個伺服器: 192.168.0.1 源伺服器 有目錄 /opt/test/ 192.168.0.2 目標伺服器 有目錄 /opt/bak/test/ 實現的目的就是保持這兩個伺服器某個檔案目錄保持實時同步 實現方式: 通過rsync+inotify-too